[英]How to make EndInvoke generic?
在我的代码中,我使用BeginInvoke
引发事件,但是由于每个事件具有不同的EventArgs
,所以我的代码充满了重复的功能,例如:
private void EndAsyncConnect(IAsyncResult iar)
{
var ar = (System.Runtime.Remoting.Messaging.AsyncResult)iar;
var invokedMethod = (EventHandler<InfoArgs>)ar.AsyncDelegate;
invokedMethod.EndInvoke(iar);
}
private void EndAsyncReceived(IAsyncResult iar)
{
var ar = (System.Runtime.Remoting.Messaging.AsyncResult)iar;
var invokedMethod = (EventHandler<ReceivedArgs>)ar.AsyncDelegate;
invokedMethod.EndInvoke(iar);
}
有没有办法使EndAsync函数对所有事件通用?
如果您所有的事件委托类型都是EventHandler<T>
,那么这应该起作用:
void CompletionCallback<T>(IAsyncResult iar)
where T : EventArgs
{
var ar = (System.Runtime.Remoting.Messaging.AsyncResult)iar;
var invokedMethod = (EventHandler<T>)ar.AsyncDelegate;
invokedMethod.EndInvoke(iar);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.