我目前正以10秒的间隔使用System.Threading.Timer.每次计时器触发时,我都会添加一小段代码写入文件,而且大多数情况下它会按时触发,有时候(大概是应用程序的其余部分是买的),无法触发30秒或40秒,并连续快速地反复射击.
我可以在.NET 3.5中使用更可靠的计时器吗?
计时器设置如下
Timer someTimer = new Timer(new TimerCallback(SomeMethod), null, 0, 10000);
Run Code Online (Sandbox Code Playgroud)
...回调是:
private static void SomeMethod(object state)
Run Code Online (Sandbox Code Playgroud)
但是,提供比这更多的代码是很困难的,因为Timer通常会正确触发.当它嵌入一个大型应用程序(约100,000行左右)时,多个线程被射击,左,右和中心,你慢慢开始看到计时器间歇性地发射.我看过几篇帖子暗示ThreadPool可能已经用尽了,所以我现在正在寻找这个可能是我正在经历的内容.
请参阅.net中的不同计时器类

在.NET中有三个称为"Timer"的计时器类.听起来你正在使用Windows Forms,但实际上你可能会发现System.Threading.Timer类更有用 - 但要小心,因为它回调了池线程,所以你不能直接与你的表单交互回调.
更准确的定时器 - 根据MSDN
Windows窗体计时器组件是单线程的,精度限制为55毫秒.如果需要更高精度的多线程计时器,请在System.Timers命名空间中使用Timer类.
这听起来很像线程池饥饿。注意在线程池中运行的长时间运行/阻塞作业,或者使用异步 io 重写,或者在长时间运行 CPU 密集型作业的情况下,不要在线程池中运行这些作业。在他们自己的线程上运行它们或使用后台工作者。