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
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