假设我有Timer
处理了Elapsed
事件。执行方法代码的线程是什么?
是否创建了计时器的线程?如果是这样,那意味着如果我希望它在另一个线程上,我必须确保在线程主循环中创建计时器而不是线程的初始化 - 正确吗?
答案 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