我有一個連續運行的應用程序,它創建和銷燬類其中有一些像鼠標點擊事件和事件等等...... 第一個問題是什麼是正確的方法退訂?如果訂閱這個樣子的:C#.NET合適的事件訂閱和取消訂閱
Panel1.MouseClick += new MouseEventHandler(Action_MouseClick);
是正確的退訂這樣的:
Panel1.MouseClick -= new MouseEventHandler(Action_MouseClick);
還是確定要做到這一點:
Panel1.MouseClick -= Action_MouseClick;
或者是無論哪種方式好不好?
我的另一個問題是,是,如果我使用微軟的Visual C#工作室通過設計人員創建的事件,它會自動退訂的「處置」方法的一部分?或者我仍然需要在代碼中放置取消訂閱方法?
感謝qstarin ......我注意到,如果類已經得到妥善處置,如果我不退訂一些由設計者設定的事件的節目會慢慢泄漏內存和我想知道,這意味着雙擊上設計器中的Button將創建buttonClick事件。但我並沒有贊成這些事件。 根據文章: 「http://msdn.microsoft.com/en-us/library/ms366768%28VS.80%29.aspx」 林想知道如果垃圾收集器是從堆中刪除對象如果我沒有參加這些活動。 – ecklerpa 2010-07-13 20:24:17
從那篇文章中,「只要發佈對象擁有該引用,您的訂閱對象就不會被垃圾收集。「 表單上的一個控件是發佈對象,對控件的唯一引用是其表單中的成員變量(通常是這種情況,除非你特別保留對控件的引用),因此,一旦表單不見了,GC不能達到控制,因此不能到達組播代理 所有引用無法訪問,應該收集 – 2010-07-13 20:39:51
另外,作爲一個健全性檢查,我會認爲,如果設計器自動訂閱,但不自動取消訂閱,導致內存泄漏,然後一大堆.Net應用程序會有這個問題 - 也許很明顯,情況並非如此(或者我們會聽到更多,是的) – 2010-07-13 20:41:18