// button1がクリックされた時. private void button1_Click(object sender, EventArgs e) { // 非同期処理で実行するデリゲートasyncButtonの生成. AsyncButtonDelegate asyncButton = new AsyncButtonDelegate(AsyncButton); // AsyncButtonを呼ぶAsyncButtonDelegateオブジェクトasyncButtonの生成. // 非同期処理の完了後に実行するAsyncCallbackデリゲートcallbackの生成. AsyncCallback callback = new AsyncCallback(AsyncCallbackFunc); // 非同期処理完了後にAsyncCallbackFuncを実行するAsyncCallbackオブジェクトcallbackを生成. // 非同期処理の開始. asyncButton.BeginInvoke(callback, null); // asyncButton.BeginInvokeで非同期処理開始(非同期処理完了後に実行するcallbackを渡している.) }
// 非同期処理完了後のコールバックメソッドAsyncCallbackFunc. public void AsyncCallbackFunc(IAsyncResult ar) { // IAsyncResult型arをAsyncResultにキャスト. AsyncResult asyncRes = (AsyncResult)ar; // arをAsyncResult型asyncResにキャスト. // 非同期処理で使ったデリゲートを取得. AsyncButtonDelegate asyncButton = (AsyncButtonDelegate)asyncRes.AsyncDelegate; // asyncRes.AsyncDelegateをキャストしてasyncButtonを取得. // 非同期処理の完了. asyncButton.EndInvoke(ar); // asyncButton.EndInvokeで完了. // 3秒待つ.(元に戻す処理.) Thread.Sleep(3000); // Thread.Sleepで3秒休止. // StartDelegateの生成. StartDelegate start = new StartDelegate(Start); // startの生成. IAsyncResult iar3 = button1.BeginInvoke(start); // button1.BeginInvokeでstartが持つメソッドに委譲. button1.EndInvoke(iar3); // button1.EndInvokeで完了. }