2011-09-16 11 views
17

Come utilizzare RemoveHandler con metodi anonimi?VB.NET RemoveHandler e metodi anonimi

Questo è come io aggiungo un gestore per MyEvent evento della classe MyClass

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

Come posso quindi utilizzare RemoveHandler per rimuovere il gestore per l'evento MyEvent

risposta

26

In in generale, se hai bisogno di disiscriverti dall'evento, ti consiglio di non usare un lambda come questo, e invece di usare un metodo standard.

Detto questo, è ancora possibile utilizzare il metodo anonimo, ma è necessario memorizzare un riferimento ad esso per la disiscrizione. Se si deve annullare un metodo anonimo, come minimo, è necessario memorizzare il delegato in una variabile per rimuovere in un secondo momento:

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

AddHandler MyClass.MyEvent, subscription 

' Later 
RemoveHandler MyClass.MyEvent, subscription 
+1

Rende sensi. Se questo è il caso, è inutile usare metodi anonimi quando devo rimuoverlo in un secondo momento. – acermate433s

+1

@ acermate433s: vero, ecco perché ho suggerito di utilizzare un metodo standard. L'unico vantaggio di un lambda, thoguh, è che puoi chiudere le variabili locali invece di promuoverle a livello di classe, il che può essere utile a volte ... –