2017-09-11 4 views
1

In meiner Window-Service-Anwendung wird die Timer-Funktion nie aufgerufen. Ich habe den Dienst auf meinem Computer bereitgestellt und dann den Dienst mit Haltepunkten für verschiedene Funktionen an Visual Studio angeschlossen. Nach OnStart() wird keine meiner Funktionen aufgerufen.C# Window Service ruft keine Timer-Funktion auf

Hier ist meine OnStart() Funktion

protected override void OnStart(string[] args) 
{ 
    this.timer = new System.Timers.Timer(50000); 
    this.timer.AutoReset = true; 
    this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick); 
    this.timer.Start(); 
} 

Aktualisiert 2017.09.12: Added Ereignis in try log und Diese Funktion fangen dann ruft timer1_tick():

private void timer1_Tick(object sender, EventArgs e) 
{ 
    try 
    { 
     EventLog.WriteEntry("Running.."+ e.ToString()); 
    } 
    catch (Exception ex) 
    { 
     EventLog.WriteEntry("Caught Exception "+ex.ToString(), EventLogEntryType.Error); 
    } 
} 

Die timer1_tick nie aufgerufen . Irgendwelche Vorschläge?

Update 12/09/2017: Ich überprüfte das Ereignisprotokoll. Unter Windows Logs> Anwendung kann ich die Nachricht sehen, der Dienst wurde erfolgreich gestartet. Die Ereignisprotokolle, die im try-catch-Block hinzugefügt wurden, werden jedoch nicht angezeigt. Ich bin mir nicht sicher, ob mir etwas fehlt.

Ich habe den Dienst zum Debuggen an Visual Studio angehängt. Im folgenden Bild wird die Methode OnStart() aufgerufen. Habe ich nur noch die Thread.Sleep(30000) so dass ich einige Pufferzeit bekommen, den Prozess zu dem Debugger anhängen zu vermeiden Überspringen der OnStart() Funktion

enter image description here

Nachdem der Timer gestartet, ich habe einen Stützpunkt auf der TimerTick() -Funktion erwartet es getroffen werden, aber es hat nie

enter image description here

+0

Sie haben lange genug gewartet? dumme Frage vielleicht, aber Sie werden es nie wissen :) –

+0

Versuchen Sie, mit einem niedrigeren Intervall zu initialisieren und einen try \ catch innerhalb des timer1_Tick, protokollieren die Ausnahme, wenn es auftritt. –

+0

@MartinoBordin Ich habe das Intervall auf 5 Sekunden reduziert und einen try-catch-Block hinzugefügt, aber ich bekomme keine E-Mails. –

Antwort

2

timer1_Tick wahrscheinlich ist angemessen in Ihrem OnStart scheint, als alles, was genannt wird. Vielleicht liegt der Grund dafür, dass Sie keine E-Mails erhalten, darin, dass _SendEmail die Ausnahme auslöst.

Schreiben Sie an die EventLog möglicherweise weitere Informationen?

private void timer1_Tick(object sender, EventArgs e) 
{ 
    try 
    { 
     SendMail._SendMail("Processing A started at" + DateTime.Now.ToString()); 
     Logging.log.LogInput("start refund process"); 
    } 
    catch (Exception ex) 
    { 
     EventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error); 
    } 
} 

Als bewährte Methode würde ich auch auf die EventLog in OnStart und OnStop schreiben.

protected override void OnStart(string[] args) 
{ 
    // Log a service start message to the Application log. 
    EventLog.WriteEntry("My Service in OnStart."); 

    timer = new System.Timers.Timer(50000); 
    timer.AutoReset = true; 
    timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Tick); 
    timer.Start(); 
} 

protected override void OnStop() 
{ 
    // Log a service stop message to the Application log. 
    EventLog.WriteEntry("My Service in OnStop."); 
} 
+0

Ich habe die Ereignisprotokolle wie vorgeschlagen hinzugefügt. Ich habe sie sogar im try-Block hinzugefügt, aber die Ereignisanzeige zeigt keine Nachricht an. Es zeigt, dass der Dienst erfolgreich gestartet wurde, aber danach nichts mehr. –

+0

@AnanthKumble Ihr Problem ist nicht in dem von Ihnen bereitgestellten Code enthalten. Ich habe einen einfachen Dienst mit nichts als dem Timer erstellt und es funktioniert wie erwartet. Bleibt Ihr Service am Laufen, vielleicht stürzt er? –

+0

läuft der Dienst weiter.Sogar ich habe ein anderes Window-Service-Projekt erstellt und die Timer-Funktion wurde wie erwartet aufgerufen. Ich versuche, das Problem in einem vorhandenen Fensterdienstprojekt zu beheben –

Verwandte Themen