在C#中,我習慣於清除每個訂閱我在Dispose()
中的自定義事件,以避免忘記取消訂閱我的事件的訂閱者的內存泄漏。有什麼方法可以清除訂閱VB.NET中的事件嗎?
這很簡單,只需調用MyEvent = null
即可,因爲C#編譯器會自動生成一個委託字段。不幸的是,在VB.NET中,似乎沒有簡單的方法來做到這一點。我想出的唯一解決方案是編寫一個Custom Event
,添加自定義的添加和刪除處理程序,調用Delegate.Combine
/Delegate.Remove
,這基本上是C#編譯器的功能。但是爲了能夠清除訂閱而必須爲每個事件執行此操作似乎對我來說有點「過度」。
有沒有人有另一個想法來解決這個問題?謝謝。
謝謝!沒有看到該文檔部分,非常有幫助。在使用反射時,只是將一些變量設置爲null才顯得很重;但在調試時斷言每個字段都已正確設置爲null非常有用。 – 2009-11-10 12:39:11
我在想也許可能有一個通用的ClearAllSubscriptions方法,它使用反射來處理任何類型:然後Clear方法中所有需要的都是ClearAllSubscriptions Me – MarkJ 2009-11-10 13:52:20