.NET删除内联事件处理程序

时间:2012-10-17 08:36:47

标签: .net vb.net events event-handling

我在Visual Basic.NET中添加和删除事件处理程序时遇到了一些问题。 虽然这通常很容易,但我需要删除内联事件处理程序。问题是它是否以及如何运作。

AddHandler object.ConnectionSuccessful, Sub()
                                            RemoveHandler object.ConnectionSuccessful, Me
                                        End Sub

这是我尝试它的方式,它不起作用。现在的问题是,如果不是这样,我该如何再次删除此内联事件处理程序?我找到了一些从对象中删除所有事件处理程序的残酷方法,但这不是我想要做的。我只想删除这一个特定的事件处理程序。

我知道如果我只使用普通函数和AddressOf运算符,那些问题就会消失。但在这种情况下,使用内联方法会更方便。

任何人都有这个想法吗?

1 个答案:

答案 0 :(得分:1)

如果将lambda分配给变量,则可以执行此操作(假设此类内联结构接近您想要的内容)。请注意,您必须键入lambda,在本例中为Action,以便从自身引用自身。

Module Module1

Event TestEvent As Action

Sub Main()

    Dim TestLamba As Action = Sub()
                                  Console.Write("Event!")
                                  RemoveHandler TestEvent, TestLamba
                              End Sub

    AddHandler TestEvent, TestLamba

    RaiseEvent TestEvent()

    RaiseEvent TestEvent()

    Console.ReadKey()

End Sub

End Module

如果您在上面运行此测试控制台应用程序,您将看到该事件被触发两次,但“事件!”只被写入控制台一次。