浅水滩生活

专注于.NET设计架构和技术、项目管理等IT相关内容

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

问题:

在windows service程序中,定时器在运行一段时间后不工作

分析:

在查阅了大量的资料后,我们发现导致这个错误的原因是因为.NET FrameworkSystem.Timers.Timerbug导致的。以下是该BUG的简单信息:

BUG: The Elapsed event of the System.Timers.Timer class is not raised in a Windows service

Article ID

:

KB 842793

Last Review

:

July 27, 2004

Revision

:

1.0

SYMPTOMS

You can use the Microsoft .NET Framework to create a new Microsoft Windows service that contains a System.Timers.Timer object. When you run this new Windows service, the Elapsed event of the System.Timers.Timer class may not be raised.

CAUSE

Note In this section, the System.Timers.Timer object is referred to as the Timer object.

In the event handler for the Elapsed event of the Timer object, if you call the Stop method of the Timer object, the reference to the Timer object is lost. The garbage collector then reclaims the memory that is associated with the Timer object. Later, even if you call the Start method of the Timer object to raise the Elapsed event, the call does not work. The Elapsed event is not raised.

WORKAROUND

To work around this problem, use a System.Threading.Timer object instead of the System.Timers.Timer object.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section.

 

详见以下链接内容,http://support.microsoft.com/default.aspx?scid=kb;EN-US;842793

解决方案:

按照KB 842793的建议,用System.Threading.Timer替换System.Timers.Timer

posted on 2005-01-22 16:20  浅水滩  阅读(2324)  评论(0编辑  收藏  举报