Ich habe einen in C# geschriebenen Windows-Dienst, der alle paar Minuten eine Aufgabe ausführen soll. Ich verwende eine System.Timers.Timer
aber es scheint nicht zu funktionieren. Ich habe nachgeschaut viele verschiedene Beiträge hier auf SO und anderswo und ich sehe nicht, was mit meinem Code falsch ist.
Hier ist mein Code, wobei nicht zeitabhängige Elemente aus Gründen der Übersichtlichkeit entfernt wurden...
namespace NovaNotificationService
{
public partial class NovaNotificationService : ServiceBase
{
private System.Timers.Timer IntervalTimer;
public NovaNotificationService()
{
InitializeComponent();
IntervalTimer = new System.Timers.Timer(60000); // Default in case app.config is silent.
IntervalTimer.Enabled = false;
IntervalTimer.Elapsed += new ElapsedEventHandler(this.IntervalTimer_Elapsed);
}
protected override void OnStart(string[] args)
{
// Set up the timer...
IntervalTimer.Enabled = false;
IntervalTimer.Interval = Properties.Settings.Default.PollingFreqInSec * 1000;
// Start the timer and wait for the next work to be released...
IntervalTimer.Start();
}
protected override void OnStop()
{
IntervalTimer.Enabled = false;
}
private void IntervalTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{ // Do the thing that needs doing every few minutes...
DoWork();
}
}
}
Ich kratze mir wirklich den Kopf darüber. Kann mir jemand sagen, was ich hier falsch mache?
EDITAR: Auf Anregung habe ich Folgendes hinzugefügt IntervalTimer.Enabled = true;
vor IntervalTimer.Start();
in der OnStart-Methode des Dienstes. Damit ist das Problem nicht gelöst.
Ich habe Datei-Trace-Protokollierung in den Dienst hinzugefügt, um einige der Interna zu bestätigen, und ich weiß sicher, dass der Timer.Enabled-Wert wahr ist, wenn OnStart() beendet ist.