调用我的计时器方法的哪个线程被调用?

时间:2012-12-05 16:06:47

标签: c# .net multithreading

假设我有Timer处理了Elapsed事件。执行方法代码的线程是什么?

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

1 个答案:

答案 0 :(得分:1)

线程是线程池中的一个。没有办法预测哪个线程与经过的方法相关联。

详细信息: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