C#Windows服务计时器未触发

时间:2011-05-18 20:11:46

标签: c# windows service timer

我在Windows服务中使用System.Threading.Timer来定期执行方法。 计时器只发射一次,它不会发射。任何人都可以帮忙。

以下是代码

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 个答案:

答案 0 :(得分:3)

函数调用中的最后一个参数(Timeout.Infinite)告诉它在第一次触发和每个后续时间之间使用无限间隔。所以它会在1秒钟之后发射一次,然后再也不会发射。你应该这样做:

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

来自documentation

  

回调调用之间的时间间隔,以毫秒为单位。指定Timeout.Infinite以禁用定期信令。

答案 1 :(得分:1)

第一个超时值是等待第一次调用回调的时间,但第二个是重复间隔。例如,您可以将其设置为等待第一个“tick”的5分钟,然后每分钟重复一次。

通过传递Timeout.Infinite作为最后一个参数,你告诉它只调用一次。

MSDN:System.Threading.Timer constructor