2013-04-25 45 views
1

在我的代码我提出用BeginInvoke事件,但由于每个事件都有不同EventArgs,我的代码是完全重复的功能,如:如何使EndInvoke泛型?

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功能通用于所有的事件?

回答

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); 
}