2011-09-15 69 views
6

如果我在使用AddHandler後總是需要調用RemoveHandler,那麼最好的地方在哪裏呢?在vb.net中,如果我使用AddHandler,我必須使用RemoveHandler嗎?

我已經搜索了幾個類似的問題如下,但我不太明白。

When and where to call the RemoveHandler in VB.NET?

AddHandler/RemoveHandler Not Disposing Correctly

我認爲垃圾收集在C#或vb.net將未使用的對象的照顧。另外,在vb.net設計器中,它會自動生成Dispose Sub。所以我根本沒有注意按照程序釋放資源。我會有任何內存泄漏問題嗎?請爲我提供一些鏈接/文件以開始學習。

Protected Overrides Sub Dispose(ByVal disposing As Boolean) 
    Try 
     If disposing AndAlso components IsNot Nothing Then 
      components.Dispose() 
     End If 
    Finally 
     MyBase.Dispose(disposing) 
    End Try 
End Sub 

非常感謝!

+0

你將不得不發佈你使用AddHandler的上下文。 – CommonSense

回答

10

如果我總是需要使用的AddHandler後打電話到RemoveHandler,哪裏是這樣做

你不一定要做到這一點的最佳場所。

如果您的源對象(具有事件的對象)將超出您的訂閱者,通常只需要擔心調用RemoveHandler。如果你在一個表單中工作,那麼這個表單將會阻止源再次發起事件,並且這兩個對象都將超出範圍並且(最終)被垃圾收集,所以你沒有問題。

如果您從長壽命對象上訂閱某個其他對象上的事件,該事件將在長壽命對象之前「消失」,則此問題會更多。這可能導致內存泄漏,即使使用垃圾收集器也是如此。在這種情況下,當您完成事件的收聽時,您會想要調用RemoveHandler。但是,何時發生這種情況並沒有單一的指導,因爲它取決於所討論的事件和應用程序邏輯。

相關問題