比方說,我將事件處理程序綁定到Timer
的Tick
事件。Tick發生後,與定時器關聯的EventHandlers是否仍然在那裏?
Timer myTimer = new Timer();
myTimer.Tick += new EventHandler(TickHandler);
myTimer.Start();
多長時間可以把相關EventHandler
留栓到Timer
?當Tick
發生時它會被移除嗎?當我做myTimer.Stop()
時它會被刪除嗎?
比方說,我將事件處理程序綁定到Timer
的Tick
事件。Tick發生後,與定時器關聯的EventHandlers是否仍然在那裏?
Timer myTimer = new Timer();
myTimer.Tick += new EventHandler(TickHandler);
myTimer.Start();
多長時間可以把相關EventHandler
留栓到Timer
?當Tick
發生時它會被移除嗎?當我做myTimer.Stop()
時它會被刪除嗎?
處理程序將在那裏,每發生一次Tick
都將被觸發。如果您致電myTimer.Stop()
它將不再0123',所以處理程序不會啓動,但它仍然會在那裏。如果你只想調用haldner一次,你可以明確地刪除它或停止計時器。它會在那裏,直到你使用myTimer.Tick -= new EventHandler(TickHandler);
分開它,或者你的對象被垃圾回收器收集,如@rerun所述。
它會留下來,直到對象被丟棄或刪除處理程序。
事件處理程序將關聯,直到您將其從對象中分離出來,或者直到該對象被丟棄爲止。
分離:
myTimer.Tick -= (TickHandler);
它遵循的規則,任何.NET的事件。它將保持連接到對象,直到您明確刪除它。當然,如果定時器本身被破壞,那麼處理程序將不再被調用。
直到什麼物體被丟棄?計時器或具有事件處理程序的計時器? – svick 2011-08-09 14:52:16