2011-09-16 52 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的一个优点是你可以关闭局部变量而不是将它们提升到课程级别,这在有时可能有用... –