Exemplo n.º 1
0
        // 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を渡している.)
        }
Exemplo n.º 2
0
        // 非同期処理完了後のコールバックメソッド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で完了.
        }