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