c# - 定时器比 System.Threading.Timer 更可靠

标签 c# .net 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)

但是,很难提供比这更多的代码,因为计时器通常会正确触发。当它嵌入到一个大型应用程序(约 100,000 行左右)中时,随着多个线程被触发,左、右和中间,您会慢慢开始看到计时器间歇性地触发。 我看到几篇帖子暗示 ThreadPool 可能已耗尽,所以我目前正在查看这是否是我遇到的情况。

最佳答案

在.net中引用不同的定时器类

Different Timer class in .net

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

更准确的计时器 - 根据 MSDN

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

关于c# - 定时器比 System.Threading.Timer 更可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781853/

相关文章:

Android:无论前一个滴答声尚未完成,计时器都会滴答作响吗?

c# - C# 中具有零个或多个参数的通用构造函数

C# - 缩短函数调用

c# - 如何正确读取/解释原始 C# 堆栈跟踪?

.net - 处理不准确的系统时钟

windows - 如何将 SetThreadAffinityMask 与 QueryPerformanceFrequency 一起使用?

c# - 可以接受各种类型的方法

C#使文件从只读读/写

c# - 从 WSDL 文件在 Visual Studio 中创建 Web 服务代理

r - R Shiny 的倒数计时器?