Delegateを非同期で実行するには, BeginInvoke EndInvoke メソッドを利用しますが、その際にBeginInvokeから取得できるのが IAsyncResult型のオブジェクトになります。 このIAsyncResult型のオブジェクトですが、実態は以下のクラスのインスタンスです。 System.Runtime.Remoting.Messaging.AsyncResult こちらのクラスにキャストすると、IAsyncResult型のままでは見えない以下のプロパティに アクセスできます。 AsyncDelegate BeginInvokeの呼び出し元のDelegateが取得できます。 このDelegateが取れると、わざわざ以下のようにしてBeginInvokeを呼ぶ必要がなくなります。 MethodInvoker invoker = new MethodInvoker