C # Windows Сервисные таймеры не работают - PullRequest
2 голосов
/ 19 мая 2011

Я использую System.Threading.Timer в службе Windows для периодического выполнения метода.Таймер срабатывает только один раз, он не срабатывает.Может кто-нибудь, пожалуйста, помогите.

Ниже код

private TimerCallback timerDelegate;

protected override void OnStart(string[] args)
{
    timerDelegate = new TimerCallback(DoWork);
    serviceTimer =  new Timer(timerDelegate, null, 1000,Timeout.Infinite);
}

private void DoWork(object state)
{
    GetMessages();
}

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Последний параметр (Timeout.Infinite) в вашем вызове функции указывает ему использовать бесконечный интервал между первым срабатыванием и каждым последующим.Так что он будет срабатывать один раз через 1 секунду, а затем никогда больше.Вы, вероятно, должны сделать:

serviceTimer = new Timer(timerDelegate, null, 1000, 1000);

Из документации :

Интервал времени между вызовами обратного вызова в миллисекундах.Укажите Timeout.Infinite для отключения периодической сигнализации.

1 голос
/ 19 мая 2011

Первое значение тайм-аута - это сколько времени ждать первого вызова обратного вызова, но второе - для интервала повторения. Вы можете установить ожидание 5 минут для первого «тика» и повторять каждую минуту, например.

Передав Timeout.Infinite в качестве последнего аргумента, вы сказали, что он вызывается только один раз.

MSDN: Конструктор System.Threading.Timer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...