2013-04-25 29 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); 
}