如何从VB.NET中的事件获取一个实际的EventHandler委托实例? [英] How can I get an actual EventHandler delegate instance from an event in VB.NET?

查看:94
本文介绍了如何从VB.NET中的事件获取一个实际的EventHandler委托实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  EventHandler handler = this.SomeEvent; 

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

  Delegate [] attachedHandlers = handler.GetInvocationList(); 

在VB.NET中,我似乎无法弄清楚如何做类似的事情。 / p>

这不起作用:

  Dim handler As EventHandler = Me .SomeEvent 

...由于以下错误:


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


但是这也不行:

  Dim handler As EventHandler = AddressOf Me.SomeEvent 

...因为:


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


那么我怎么能真正得到一个 EventHandler VB.NET中的一个事件?立即想到的唯一想法是使用反思,但这似乎很可笑。

解决方案

 私人事件MyEvent()
私人委托()As System.Delegate = MyEventEvent.GetInvocationList()

未记录,发现 here


In C#, I could do something like this:

EventHandler handler = this.SomeEvent;

...which would allow me to, for example, do:

Delegate[] attachedHandlers = handler.GetInvocationList();

In VB.NET, I can't seem to figure out how to do a similar thing.

This doesn't work:

Dim handler As EventHandler = Me.SomeEvent

...due to the following error:

Public Event SomeEvent(sender As Object, e As EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.

But this doesn't work either:

Dim handler As EventHandler = AddressOf Me.SomeEvent

...because:

'AddressOf' operand must be the name of a method (without parentheses).

So how can I actually get an EventHandler from an event in VB.NET? The only idea that's immediately coming to mind is to use reflection, but that seems pretty ridiculous.

解决方案

   Private Event MyEvent()
   Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()

undocumented, found here

这篇关于如何从VB.NET中的事件获取一个实际的EventHandler委托实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆