Avatar billede Haven Nybegynder
18. april 2013 - 09:41 Der er 1 kommentar og
1 løsning

System.Threading.Timer Callback bliver ikke kaldt

Hej Eksperter,

Jeg er ved, at lave en funktion som skal køre på bestemte tidpunkter hver dag. Tidspunkterne bliver hentet fra et textfield, og bliver lagt i en liste, som jeg derefter looper igennem og starter en timer på de tidspunkter listet i listen. Mit problem er, at efter det delay, som jeg har sat på timeren er udløbet, kører min method ikke. Men hvis jeg sætter delay til 0, kører de alle uden problemer.

Her er koden:

private void SetTimers()
{

    try
    {
        List<string> Hours = new List<string>(
                                    Settings["StatueWarHours"].Split(new string[] { "\r\n" },
                                    StringSplitOptions.RemoveEmptyEntries));


        foreach (string hourMinute in Hours)
        {
            string[] arrHourMinute = hourMinute.Split(':');
            int hour = arrHourMinute[0].ToInt();
            int minute = arrHourMinute[1].ToInt();

            hour = hour + 1;
            if (hour > 24) hour = hour - 24;

            var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, minute, 0);
            if (DateTime.Now.CompareTo(dt) > 0)
                dt = dt.AddHours(24);
                   
            StartTimer(dt);
        }

    }
    catch (Exception ex)
    {
        AI.Log(Parent, "Something went wrong", ex);
    }
}

Funktionen til, at starte timer:

private void StartTimer(DateTime dt)
{
    try
    {
        TimerCallback tcb = new TimerCallback(MedalReward);
        TimeSpan start = dt.Subtract(DateTime.Now);
        AI.Log(Parent, "Hmm.? " + start.ToString(), null);
        new System.Threading.Timer(tcb, null, start, TimeSpan.FromHours(24));
        AI.Log(Parent, "Added new timer " + dt, null);
    }
    catch (Exception ex) {
        AI.Log(Parent, "Exception occured", ex);
           
    }
}


Som sagt, hvis jeg sætter Delay på System.Threading.Timer til "New TimeSpan(0)" så kører alle timers, ihvertifald første gang, men ellers kører de ikke.

Hvad har jeg gjort galt :D?

Tak på forhånd.
Avatar billede runesoft Nybegynder
18. april 2013 - 10:39 #1
Hej..  Jeg tror dit problem er at du ikke gemmer en reference af din timer. Når du ikke fyrer din event med det samme risikerer du at den bliver garbage collected, og så får du ingen event fra den.

-Rune
Avatar billede Haven Nybegynder
18. april 2013 - 11:06 #2
Fedt, det ser ud til, at de bare kører der ud af nu!
Jeg takker for hurtigt hjælp.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester