0

可以说我有一个处理TimerElapsed事件的事件。方法代码在哪个线程上执行?

是创建计时器的线程吗?如果是这样,这意味着如果我希望它在另一个线程上,我必须确保在线程主循环中创建计时器,而不是在线程的初始化中创建 - 对吗?

4

1 回答 1

1

该线程是线程池中的一个。无法确定哪个线程将与 elapsed 方法相关联。

详细信息:http: //msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx

(从设计的角度来看,这应该没关系)

编辑:实际上有一种方法可以定义使用哪个线程;您可以使用计时器的 SynchronizingObject 属性:

当 SynchronizingObject 为 null 时,将在系统线程池中的线程上调用处理 Elapsed 事件的方法。有关系统线程池的更多信息,请参阅 ThreadPool。

当 Elapsed 事件由可视化 Windows 窗体组件(例如按钮)处理时,通过系统线程池访问组件可能会导致异常或可能无法正常工作。通过将 SynchronizingObject 设置为 Windows 窗体组件来避免这种影响,这会导致在创建该组件的同一线程上调用处理 Elapsed 事件的方法。

请参阅:http: //msdn.microsoft.com/en-us/library/system.timers.timer.synchronizingobject.aspx

于 2012-12-05T16:08:39.753 回答