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

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

问题描述

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

 事件处理程序处理程序= this.SomeEvent;
 

...这将让我为例,做的:

 委托[] attachedHandlers = handler.GetInvocationList();
 

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

这不工作:

 昏暗的处理程序,事件处理程序= Me.SomeEvent
 

...由于以下错误:

  

公共事件SomeEvent(发件人为   对象,E作为EventArgs的)'是一个事件,   并且不能被直接调用。用一个   的RaiseEvent语句引发   事件。

但是,这也不行:

 昏暗的处理程序,事件处理程序= AddressOf Me.SomeEvent
 

......因为:

  

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

所以,我怎样才能真正得到一个事件处理程序从VB.NET的事件?这会立即来心中唯一的想法是使用反射,但似乎pretty的可笑。

解决方案

 私人事件MyEvent()
   私人代表()由于System.Delegate = MyEventEvent.GetInvocationList()
 

无证,发现<一href="http://bytes.com/topic/visual-basic-net/answers/368483-getinvocationlist-wheres-multi-cast-delgate-again">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中的事件得到一个实际的事件处理程序委托实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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