我在Visual Basic.NET中添加和删除事件处理程序时遇到了一些问题。 虽然这通常很容易,但我需要删除内联事件处理程序。问题是它是否以及如何运作。
AddHandler object.ConnectionSuccessful, Sub()
RemoveHandler object.ConnectionSuccessful, Me
End Sub
这是我尝试它的方式,它不起作用。现在的问题是,如果不是这样,我该如何再次删除此内联事件处理程序?我找到了一些从对象中删除所有事件处理程序的残酷方法,但这不是我想要做的。我只想删除这一个特定的事件处理程序。
我知道如果我只使用普通函数和AddressOf
运算符,那些问题就会消失。但在这种情况下,使用内联方法会更方便。
任何人都有这个想法吗?
答案 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
如果您在上面运行此测试控制台应用程序,您将看到该事件被触发两次,但“事件!”只被写入控制台一次。