Таймер в отдельном потоке с длительной задачей

У меня есть служба Windows, которая в методе запуска создает таймер и немедленно запускает таймер. Таймер — это длительная задача, поэтому служба при запуске в services.msc обнаруживается как ошибка. Он думал, что таймер ниже работает в отдельном потоке, и служба должна запускаться немедленно?

Если я удалю строку ниже, она будет работать нормально, но я хочу, чтобы служба запускалась после запуска службы.

_timer_Elapsed(null, null);

Удаление этой строки устраняет проблему, но я хочу этого:

protected override void OnStart(string[] args)
{
    _timer = new System.Timers.Timer();
    _timer.AutoReset = false;
    _timer.Interval = (Convert.ToInt32(ConfigurationManager.AppSettings["CheckInterval"]));
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
    _timer.Enabled = true;
    _timer.Start(); // Get the timer to execute immediately
    _timer_Elapsed(null, null); // Get the timer to execute immediately
}

person user1438082    schedule 13.04.2014    source источник


Ответы (1)


_timer_Elapsed(null, null); // Get the timer to execute immediately

Это не запускает таймер немедленно. Все, что он делает, это выполняет ту же процедуру, на выполнение которой настроен таймер. Как раз в ветке OnStart.

Если вы хотите, чтобы таймер срабатывал немедленно, установите интервал на 1 или что-то меньшее для первого раунда.

person nvoigt    schedule 13.04.2014