2011-09-16 54 views
17

如何使用匿名方法使用RemoveHandler?VB.NET RemoveHandler&匿名方法

這是我如何添加一個處理MyEvent事件類的MyClass的

AddHandler MyClass.MyEvent, Sub() 
           ... 
          End Sub 

如何再使用RemoveHandler刪除的處理程序中MyEvent事件

回答

26

在一般來說,如果您需要退訂事件,我會建議不要使用這樣的lambda,而是使用標準方法。

這就是說,你仍然可以使用匿名方法,但是你需要存儲一個對它的引用來取消訂閱。如果您必須取消訂閱匿名方法,則至少應將代表存儲在變量中以便稍後刪除它:

Dim subscription = Sub() 
          ' ... 
        End Sub 

AddHandler MyClass.MyEvent, subscription 

' Later 
RemoveHandler MyClass.MyEvent, subscription 
+1

使感官。如果是這種情況,那麼當我必須在稍後將其刪除時,使用匿名方法毫無意義。 – acermate433s

+1

@ acermate433s:的確如此,這就是爲什麼我建議使用標準方法。 lambda,thoguh的一個優點是你可以關閉局部變量而不是將它們提升到課程級別,這在有時可能有用... –