2011-02-10 84 views
0

我在考慮定時器是如何工作的,還有一些我不完全理解的東西。
A Timer使用在時間流逝時調用的事件。我假設這是由控制時鐘的OS事件觸發的(或由時鐘控制)。
但我不知道什麼線程會捕獲該事件。定時器的回調線程

Timer對象是否有自己的線程?
或者是否會在創建定時器對象的線程中調用該事件?

編輯:

,並在那裏與System.Timers.Timer之間System.Windows.Forms.Timer這方面有區別嗎?

回答

9

這取決於Timer。如果你使用System.Windows.Forms.Timer,tick事件將在UI線程中處理。在System.Threading.TimerSystem.Timers.Timer它默認爲一個線程池線程。但是,在後一種情況下,您可以指定一個SynchronizingObject,這可用於將處理程序編組到相應的線程。

+1

只需添加到引導:在前一種情況下,可以簡單地將`state`對象指定爲您的同步對象。 .NET 4使用`Dispatcher`而不是`WPF`的`ISynchronizeInvoke`,這可以以相同的方式使用 - 但不能以上述方式與`System.Timers.Timer`一起使用。 – 2011-02-10 16:05:21