У меня есть служба Windows, написанная на C #, которая предназначена для выполнения задачи каждые несколько минут. Я использую для этого 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();
}
}
}
Я действительно ломаю голову над этим. Может ли кто-нибудь заметить, что за глупость я ошибаюсь?
РЕДАКТИРОВАТЬ:
По предложению, я добавил IntervalTimer.Enabled = true;
перед IntervalTimer.Start ();
в методе OnStart службы. Это не решает проблему.
Я добавил в службу запись трассировки файлов для подтверждения некоторых внутренних функций, и я точно знаю, что значение Timer.Enabled истинно к моменту завершения OnStart ().