When implementing the Csharpserver framework, you need to write a eventdispatcherutil to trigger an event. Using the C # built-in EventHandler direct call Handler.begininvoke can invoke the EventHandler event method of the call chain in an asynchronous call, but if it is a custom Eventhandler<teventargs > Type call BeginInvoke will produce an exception (the delegate must have a target), so it is necessary to implement the asynchronous invocation of EventHandler by itself. One scenario is to get eventhandler<teventargs> All delegate[], and then call each delegate BeginInvoke (the delegate type has no BeginInvoke method and needs to be converted to eventhandler<teventargs>):
public static void Asyncdispatcherevent<teventargs> (Eventhandler<teventargs> Handler, Object Sender, Teventargs Args, AsyncCallback endinvokecallback = null) where Teventargs:eventargs
{
if (Handler = = null)
{
Return
}
if (Endinvokecallback = = null)
{
Endinvokecallback = defaultendcallbackargs<teventargs>;
}
var deles = Handler.getinvocationlist ();
foreach (eventhandler<teventargs> handler in deles)
{
Handler. BeginInvoke (Sender, Args, Endinvokecallback, Handler);
}
}
Asynchronous invocation of eventhandler<teventargs> in C #