Windows服务中的计时器

时间:2011-09-21 14:27:16

标签: c#-4.0 windows-services timer

我想在我的服务中使用计时器。 但是我听说计时器导致死锁问题。 假设我将计时器设置为每10分钟启动一次。 我的服务需要5分钟才能完成当前的执行。 但在某些情况下需要更多时间。(其不可预测性)。 那么如果我的服务无法完成当前会发生什么 在10分钟内执行。一个新的计时器事件将开火? 我当前执行该服务会发生什么? 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以在Windows服务中使用计时器,因为它也在MSDN上说明

服务应用程序旨在长期运行。因此,它通常会轮询或监控系统中的某些内容。监视在OnStart方法中设置。但是,OnStart实际上并不进行监视。一旦服务的操作开始,OnStart方法必须返回操作系统。它不能永远循环或阻止。若要设置简单的轮询机制,可以使用System.Timers.Timer组件。在OnStart方法中,您将在组件上设置参数,然后将Enabled属性设置为true。然后,计时器会定期在您的代码中引发事件,此时您的服务可以进行监控。

尽管如上所述,您仍然需要创建逻辑以避免死锁或Elapsed事件中指定的代码比间隔本身更长。

在ThreadPool线程上引发了Elapsed事件。如果Elapsed事件的处理持续时间超过Interval,则可能会在另一个ThreadPool线程上再次引发该事件。因此,事件处理程序应该是可重入的。

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.80%29.aspx