问题
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.
回答1:
Private Event MyEvent()
Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()
undocumented, found here
回答2:
if you take a look at this How to Attach the Events of an Original Object to a Deep Copied Clone I have a code example on how to get the delegate for the event via reflection. As far as I know, its the only way to do it in VB.
来源:https://stackoverflow.com/questions/4108163/how-can-i-get-an-actual-eventhandler-delegate-instance-from-an-event-in-vb-net