c# - 来自同一个 System.Timers.Timer 的两个 ElapsedEvent 能否同时运行

标签 c# timer

在C#中,当使用System.Timers.Timer时,ElapsedEvent是否可以在前一个没有完成的情况下运行? 想象一下,我有一个事件比我预期的要花更长的时间才能完成,并且在执行完成之前计时器的间隔时间到了。那么会发生什么?

根据我在 MSDN 上的阅读,System.Timers 在线程池上运行,而 Windows 定时器运行单线程。 我担心我会不小心同时举办两个(或更多!)事件。

最佳答案

是的,Elapsed 事件将再次触发。 仔细阅读 MSDN 文档,上面写着:

如果 SynchronizingObject 属性为 Nothing,则在 ThreadPool 线程上引发 Elapsed 事件。如果 Elapsed 事件的处理持续时间超过 Interval,则该事件可能会在另一个 ThreadPool 线程上再次引发。在这种情况下,事件处理程序应该是可重入的。

使用 Stop 方法也不能确保 Elapsed 事件的结束,因为 Stop 事件可能会在与 Interval 事件相关的不同线程中排队。

再次阅读MSDN阐明如何处理这种情况

关于c# - 来自同一个 System.Timers.Timer 的两个 ElapsedEvent 能否同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462812/

相关文章:

c# - 获取控件调用方法的名称

c#-4.0 - 在 VS 2010 中向 Windows 服务添加 System.Threading.Timer

javascript - 如何使用 Javascript 在 Html 页面上添加计时器

c# - 如何从字节数组添加电子邮件附件?

c - 使用 Microblaze 设置计时器?

javascript - 计算给定时间 javascript 中的点击次数/空格键

javascript - Datatables fnFilter 延迟加载器/指示器

c# - 基于两点绘制工字梁

c# - visual studio XAML 设计器未加载

c# - 我可以在不引用包含类的情况下引用嵌套结构中的 Const 字段吗?