c# Windows Service计时器滴答不止一个
本文关键字:一个 不止 Windows Service 计时器 滴答 | 更新日期: 2023-09-27 18:04:56
我试图使一个服务,应该执行我的代码后,每秒钟我的代码执行结束。但是当我启动服务并调试它时,计时器滴答不止一个,我的意思是,我的代码在第一次执行结束之前执行了两次。
这是我的代码;
Timer timer1 = new Timer(1000);
bool _service_working = false;
protected override void OnStart(string[] args)
{
timer1.Elapsed += new ElapsedEventHandler(runProcess);
timer1.Enabled = true;
timer1.Start();
_service_working = false;
}
protected override void OnStop()
{
timer1.Enabled = false;
}
private void runProcess(object sender, ElapsedEventArgs e)
{
try
{
if (_service_working == false)
{
timer1.Enabled=false;
_service_working = true;
}
#region myCodes
}
catch (Exception ex)
{
_logService.insert_log(1022, 2, ex.Message, "Path : runProcess");
}
finally
{
_service_working = false;
timer1.Enabled = true;
}
}
当我调试它时,计时器再次在runProcess如果块…
假设你使用的是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
}