デリゲートの非同期呼び出し
複雑で時間のかかるタスクをデリゲートに完了させたい場合、同期呼び出しは適切な選択ではないことがあります。その場合、ユーザーは退屈な時間の消費に直面することになり、長い(比較的)お待ちください。このとき、デリゲートの非同期呼び出しは、C#の非同期呼び出しもカプセル化され、beginInvokeとendInvkeを介して完了します。以下に例を示します。义1. 了 コミッションを定義します。
MyDelegate2. は外部サブスクリプションのイベントを定義します
3. やってみようメソッドが呼び出されるたびに increment
が自動的に増加します。値が 5 の場合、イベントは非同期で呼び出されます 重要な点は次のコードです。
IAsyncResult result = this.callBack.BeginInvoke
(new AsyncCallback(
(ia) => {
MessageBox.Show("completed");
AsyncResult ar = (AsyncResult)ia;
MyDelegate md = ar.AsyncDelegate as MyDelegate;
int r = md.EndInvoke(ia);
MessageBox.Show(r.ToString() + ia.AsyncState);
}), "message");
MessageBox.Show("begin invoke");
BeginInvoke 関数には 4 つのパラメータが含まれます: AsyncCallback オブジェクト: このパラメータの意味は、コールバックが完了したときに次に何をするかを指示することです。メソッドを渡す必要があります。 new AsyncCallback(ここでメソッドを受け取ります。ここではlambdaexpression
)
を使用しました。 Object
Object: コールバック終了時に呼び出されるメソッドに渡されるパラメータ。AsyncResult ar = (AsyncResult)ia;//// 受信IasyncResultを取得し、Async Resultオブジェクトに変換します
MyDelegate md = ar.AsyncDelegate as MyDelegate //// callBack オブジェクトを取得します
int r = md.EndInvoke(ia ) ;////デリゲートの呼び出しを終了し、戻り値を取得します
MessageBox.Show(r.ToString() + ia.AsyncState);////戻り値
OK を取得したかどうかを確認します。非同期デリゲートが定義されたので、次のステップは、
を呼び出します。
新しい A timer と asyntroniseDelegate オブジェクト。
callBackイベントを購読します。メソッドの最後に、1が返されます。
タイマーを使用して、増分累積操作を完了し、毎秒1を累積します。
incrementが5まで蓄積されると、callbackイベントがトリガーされ、10をループさせます。 10億秒-レート。
実行後、のプロンプトボックスが表示され、続いて 、2〜3について 秒のプロンプト ボックスが表示され、その後 と (非同期呼び出しの最後に、正常に取得されたことがわかります)の帰還上記は、C# デリゲーションの非同期呼び出しのグラフィック コード例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください。 )!