C#Windows服务计时器不止一个

时间:2015-07-27 11:36:50

标签: c# timer windows-services

我试图在我的代码执行结束后每秒创建一个应该执行我的代码的服务。但是,当我启动服务并调试它时,计时器不止一个,我的意思是,我的代码在第一次执行结束前执行了两次。

这是我的代码;

Route::group(['prefix' => 'api'], function() {
    Route::resource('users', 'ControllerName');
});

当我调试它时,如果块...

,计时器再次在runProcess中滴答

1 个答案:

答案 0 :(得分:0)

假设您正在使用System.Timers.Timer,那么Timer事件会在后台线程中引发,这意味着没有任何锁定,您的计时器事件方法可能会重叠。

一个简单的解决方案是将AutoReset设置为false,而在您的计时器事件中重新启动它,例如:

private bool terminating;

public Service()
{
    terminating = false;

    timer = new Timer(1000);
    timer.Elapsed += new ElapsedEventHandler(runProcess);
    timer.Enabled = true;
    timer.AutoReset = false;
}

protected override void OnStart(string[] args)
{
    timer.Start();
}

protected override void OnStop()
{
    terminating = true;
    timer1.Stop();
}

private void runProcess(object sender, ElapsedEventArgs e)
{
    // Do stuff

    if (!terminating)
        timer.Start(); // Restart timer
}