我不確定是否完全清楚附着在對象中的事件的影響。在什麼情況下脫離必要的事件?
這是我目前的理解,正確的或複雜:
1.附加到地方級賽事中不需要拆卸
例子:
this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing);
public event EventHandler OnMyCustomEvent = delegate { };
我假設當你的ob物品被丟棄或垃圾收集,功能被解除分配並且會自動脫離事件。
2.附加到對象,你不再需要的(= NULL;)必須從
實例分離: 附加到定時器的經過的事件,你只響應一次。我假設你需要將Timer存儲在本地變量中,以便在事件觸發後分離Elapsed事件。因此,宣佈計時器在本地方法的範圍,像這樣將導致泄漏:
System.Timers.Timer myDataTimer = new System.Timers.Timer(1000); myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed);
3.附加到事件在本地對象類並不需要處置?
例如,如果您有一個ObservableCollection,您創建,監視並讓它死亡。如果使用本地私有函數附加到CollectionChanged事件,那麼當您的類被垃圾回收時,此函數是否不會釋放,導致ObservableCollection也被釋放?
我確定我有地方我已經停止使用對象,並未能從事件(例如,我做的定時器例子)分離,所以我正在尋找一個更清晰的解釋如何工作。
你完全正確,我過於複雜的事情。在尋找示例時,幾乎所有人都表現出與事件分離,這隻會讓我相信訂戶可以讓發佈商保持活力。 – 2009-04-21 19:38:31