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 に答える