【发布时间】:2010-04-13 12:28:41
【问题描述】:
在 MSND 中找不到我的问题的答案:
Timer 类是否保证订阅 Elapsed 事件的所有处理程序都将在同一个线程池线程上执行?如果是,是否会按照添加到 Elapsed 事件的顺序执行?
【问题讨论】:
在 MSND 中找不到我的问题的答案:
Timer 类是否保证订阅 Elapsed 事件的所有处理程序都将在同一个线程池线程上执行?如果是,是否会按照添加到 Elapsed 事件的顺序执行?
【问题讨论】:
据我所知,确保 Elapsed 事件处理程序都在同一个线程上的唯一方法是设置 Timer 的 SynchronizingObject 属性(通常设置为控件或表单上的某些东西,以便Elapsed 事件在 UI 线程上处理)。否则,事件将在线程池线程上处理,这意味着它可能每次都是同一个线程,但几乎肯定不会。
见:http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx
事件处理程序触发的顺序可能将按照您添加它们的顺序,但这不能保证,并且将来可能会改变。如果您的设计依赖于按特定顺序触发的事件,您应该更改您的设计。
【讨论】: