0

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

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

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

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

有人对这件事有想法吗?

4

1 回答 1

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

如果你在上面运行这个测试控制台应用程序,你会看到事件被触发了两次,但是“Event!” 只写入控制台一次。

于 2012-10-17T16:21:46.933 回答