У меня есть служба Windows, написанная на С#, которая предназначена для выполнения задачи каждые несколько минут. Я использую System.Timers.Timer
для этого, но он никогда не срабатывает. Я смотрел много разных сообщений здесь, в SO и в других местах, и я не вижу, что не так с моим кодом.
Вот мой код с удаленными таймерами для ясности...
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();
}
}
}
Я действительно почесываю голову над этим. Может ли кто-нибудь определить, что глупо, что я ошибаюсь?
EDIT:
По предложению я добавил IntervalTimer.Enabled = true;
до IntervalTimer.Start();
в методе OnStart службы. Это не решит проблему.
Я добавил файл трассировки в службу, чтобы подтвердить некоторые из внутренних элементов, и я точно знаю, что значение Timer.Enabled истинно к завершению завершения OnStart().