如果功能没有完成,定时器会继续吗?

时间:2016-06-10 11:54:49

标签: c# timer windows-services timelapse

我目前正在创建一个使用计时器间隔的Windows服务。此计时器每秒重复一次,但完成计时器的Elapsed事件可能需要超过一秒的时间,该计时器创建如下:

Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 1000; // 1 second
timer.Elapsed += myFunction;

现在这个简单的问题:即使它还没有完成Elapsed事件,这个计时器是否仍然继续,或者计时器是否等待并在Elapsed事件结束时继续?

2 个答案:

答案 0 :(得分:3)

是的,它确实

  

如果SynchronizingObject属性为null,则在ThreadPool线程上引发Elapsed事件。如果Elapsed事件的处理持续时间超过Interval,则可能会在另一个ThreadPool线程上再次引发该事件。在这种情况下,事件处理程序应该是可重入的。

Source

答案 1 :(得分:3)

System.Timers.Timer类有一个AutoReset属性。

如果设置为false,计时器将只运行一次,允许您在功能完成时再次启动它。

如果将其设置为true,除非弹出异常,否则计时器不会每秒停止并运行您的功能。

默认情况下,此属性is set to true