计时器比System.Threading.Timer更可靠

我目前正以10秒的间隔使用System.Threading.Timer。 每次计时器触发时,我都会添加一小段代码写入文件,而且大部分时间它会按时触发,有时候(可能是当应用程序的其余部分被购买时),无法触发30或40秒,并连续快速地反复射击。

我可以在.NET 3.5中使用更可靠的计时器吗?

定时器的设置如下

Timer someTimer = new Timer(new TimerCallback(SomeMethod), null, 0, 10000); 

…回调是:

 private static void SomeMethod(object state) 

但是,提供比此更多的代码是很困难的,因为Timer通常会正确触发。 当它嵌入一个大型应用程序(约100,000行左右)时,多个线程被射击,左,右和中心,你慢慢开始看到计时器间歇性地发射。 我看过几篇post暗示ThreadPool可能已经筋疲力尽了,所以我现在正在调查,看看这可能是我遇到的情况。

这听起来就像线程池饥饿。 注意在线程池中运行的长时间运行/阻塞作业,并使用async io重写,或者在长时间运行的CPU密集型作业的情况下,只是不要在线程池中运行这些作业。 在自己的线程上运行它们或使用后台工作程序。

请参阅.net中的不同计时器类

.net中的不同Timer类

在.NET中有三个称为“Timer”的计时器类。 听起来你正在使用Windows Forms,但实际上你可能会发现System.Threading.Timer类更有用 – 但要小心,因为它回调了池线程,所以你不能直接与你的表单交互回调。

更准确的定时器 – 根据MSDN

Windows窗体计时器组件是单线程的,精度限制为55毫秒。 如果需要更高精度的multithreading计时器,请使用System.Timers命名空间中的Timer类。