【问题标题】:How can I get an actual EventHandler delegate instance from an event in VB.NET?如何从 VB.NET 中的事件中获取实际的 EventHandler 委托实例?
【发布时间】:2018-01-21 14:29:28
【问题描述】:

在 C# 中,我可以这样做:

EventHandler handler = this.SomeEvent;

...例如,这将允许我做:

Delegate[] attachedHandlers = handler.GetInvocationList();

在 VB.NET 中,我似乎不知道如何做类似的事情。

这不起作用:

Dim handler As EventHandler = Me.SomeEvent

...由于以下错误:

公共事件 SomeEvent(sender As Object, e As EventArgs)' 是一个事件, 并且不能直接调用。用一个 'RaiseEvent' 语句来引发 事件。

但这也不起作用:

Dim handler As EventHandler = AddressOf Me.SomeEvent

...因为:

'AddressOf' 操作数必须是方法的名称(不带括号)。

那么我如何才能从 VB.NET 中的事件中实际获得 EventHandler 呢?立即想到的唯一想法是使用反射,但这似乎很荒谬。

【问题讨论】:

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


    【解决方案1】:
       Private Event MyEvent()
       Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()
    

    未记录,发现 here

    【讨论】:

    • 我也没有!似乎是“不要让那个 VB.Net 开发人员看到”的事情之一
    • 我几乎想投反对票,因为它太可怕了,但显然这不是你的错,所以我会投赞成票 :o)
    • 您可能更喜欢here 中描述的显式自定义事件声明语法。
    【解决方案2】:

    如果您查看此How to Attach the Events of an Original Object to a Deep Copied Clone,我有一个代码示例,说明如何通过反射获取事件的委托。据我所知,这是在 VB 中执行此操作的唯一方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 2021-03-23
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多