C# Windows 服务计时器未触发

本文关键字:计时器 Windows 服务 | 更新日期: 2023-09-27 17:56:45

我正在使用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();
}

C# Windows 服务计时器未触发

函数调用中的最后一个参数(Timeout.Infinite )告诉它在第一次触发和每次后续时间之间使用无限间隔。所以它会在 1 秒后触发一次,然后再也不会触发。您可能应该执行以下操作:

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

从文档中:

调用回调之间的时间间隔(以毫秒为单位)。指定"超时.无限"以禁用定期信号。

第一个超时值是等待第一次调用回调的时间,但第二个是重复间隔。例如,您可以将其设置为等待 5 分钟进行第一次"滴答",之后每分钟重复一次。

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

MSDN: System.Threading.Timer 构造函数