1

在我的代码中,我使用 引发事件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 函数对所有事件都通用?

4

1 回答 1

1

如果您的所有事件委托类型都是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);
}
于 2013-04-25T10:03:28.730 回答