繁体   English   中英

如何使EndInvoke通用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM