System.Threading.Timer一段时间后没有触发

AFg*_*one 20 .net c# timer .net-4.0

我有一个Windows服务应用程序.并通过在控制台模式下运行来调试它.

在这里http://support.microsoft.com/kb/842793 写道,Timers.Timer有一个错误,而不是在Windows服务中触发.解决方法是使用Threading.Timer本文适用于.NET 1.0和1.1

我使用的是.NET 4,但经过一段时间Threading.Timer也没有开火.那可能是什么原因呢?你能建议什么作为解决方法?

谢谢,

最好的祝福

编辑:我将计时器从Threading.Timer更改为Timers.Timer,它没有任何问题.

Jon*_*eet 52

你是否在某个地方保留了对你的计时器的引用,以防止它被垃圾收集?

来自文档:

只要您使用Timer,就必须保留对它的引用.与任何托管对象一样,当没有对它的引用时,Timer会进行垃圾回收.Timer仍处于活动状态这一事实并不能阻止它被收集.

  • @AFgone:虽然在哪?如何*确定*它不是垃圾收集? (3认同)
  • +1 - 我爱你Jon Skeet,这让我发疯了:) (2认同)

Gro*_*ozz 11

您的计时器对象超出范围,并在一段时间后被垃圾收集器擦除,这会停止触发回调.

在类的成员中保存对它的引用.


atc*_*way 6

解决?

就个人而言,我建议使用RegisterWaitForSingleObject函数而不是计时器,因为您遇到的确切原因.该RegisterWaitForSingleObject注册的委托被称为在您设置analgous一个计时器,并间隔超级容易实现.您可以在几小时内启动并运行测试装置.我在Windows服务中使用这种间隔触发方法,它是一个经过验证的真正稳定的解决方案,对我有用.

阅读下面的链接,并转到文章中的链接,以获取代码示例和演练.

使用Windows服务在.NET中运行定期进程:http :
//allen-conway-dotnet.blogspot.com/2009/12/running-periodic-process-in-net-using.html