Code für die Ausführung der Methode jeden Tag zu einer bestimmten Zeit C# - (Windows-Dienst) gescheitert

Hatte ich diesen code execute-Methode der windows-Dienst jeden Tag um 5 Uhr morgens:

EDIT:

MyService ws = new MyService ();

protected override void OnStart(string[] args)
{
    if (serviceHost != null)
    {
        serviceHost.Close();
    }

    serviceHost = new ServiceHost(typeof(MyService));

    serviceHost.Open();
    double TimeOfExecution = 5;

    DateTime now = DateTime.Now;
    DateTime today5am = now.Date.AddHours(TimeOfExecution);
    DateTime next5am = now <= today5am ? today5am : today5am.AddDays(1);

    System.Threading.TimerCallback callback = new System.Threading.TimerCallback(ws.MethodToExecute());

    var timer1 = new System.Threading.Timer(callback, null, next5am - DateTime.Now, TimeSpan.FromHours(24));

 }

Ich erwartet, dass der Dienst zum ausführen in der nächste 5 Uhr, und alle 24 Stunden nach.

Methode MethodToExecute() Tat, die ausgeführt werden, um 5 Uhr (oder einen anderen angegebenen Zeit), dass Tag, aber am nächsten Tag es konnte nicht ausgeführt werden. Es scheint auch, dass es egal ist, wenn ich Sie ausgeführt oder nicht zum ersten mal, aber es scheint, wie der service geht zu schlafen, nach einiger Zeit und nicht ausgeführt wird, so dass, wenn 5 Uhr ankommt, nicht auf den aktuellen Tag, aber am nächsten Tag, wird es nicht ausgeführt.

Hat jemand eine Idee, was falsch sein könnte?

Kannst du mehr code? Insbesondere haben Sie sicherzustellen, dass Ihre timer überlebt bis zum nächsten Tag? Die Verwendung von var angibt, eine lokale variable...
Ich bearbeitet den code.
Beachten Sie, dass dies nicht mit der Zeit ändert. Wenn Sie die Sommerzeit, könnte es ändern, um 6 Uhr morgens oder 4 Uhr morgens.
Anstatt diesen service, wenn Sie möchten, es zu laufen, an einem bestimmten Punkt in der Zeit, die Sie könnte in Erwägung ziehen, dass es eine normale Konsolenanwendung, und es läuft mit dem Windows Task Scheduler
Ich habe mehrere Methoden innerhalb der service läuft, dass zu unterschiedlichen Zeiten und verschiedene Dinge tun (eine Methode, die ausgeführt wird, um 8 Uhr, Sekunde bei 3 Uhr und die Dritte um 9 Uhr), so dass ich denke, dass es einfacher ist, legen Sie diese auf diese Weise als in drei-Konsole-Anwendungen, die ausgeführt wird, auf verschiedene Zeiten und verschiedene Dinge tun, vor allem wenn man viele Methoden hat, weiß ich nicht, vielleicht ist es nur eine persönliche Präferenz...

InformationsquelleAutor vldmrrdjcc | 2013-11-29

Schreibe einen Kommentar