Beispiel #1
0
    // 非同期処理完了後のスタティックコールバックメソッドAsyncCallbackFunc.
    static void AsyncCallbackFunc(IAsyncResult ar)
    {
        // IAsyncResult型arをAsyncResultにキャスト.
        AsyncResult asyncRes = (AsyncResult)ar; // arをAsyncResult型asyncResにキャスト.

        // 非同期処理で使ったデリゲートを取得.
        AsyncronousFuncDelegate asyncronousFunc = (AsyncronousFuncDelegate)asyncRes.AsyncDelegate;   // asyncRes.AsyncDelegateをキャストしてasyncronousFuncを取得.

        // 非同期処理の結果を取得.(非同期処理は完了してるのですぐ終わる.)
        int result = asyncronousFunc.EndInvoke(ar); // asyncronousFunc.EndInvokeで結果resultを取得.

        // 結果の出力.
        Console.WriteLine("result = " + result);    // Console.WriteLineでresultを出力.
    }
Beispiel #2
0
    // Mainメソッドの定義
    static void Main()
    {
        // 非同期処理で実行するデリゲートasyncronousFuncの生成.
        AsyncronousFuncDelegate asyncronousFunc = new AsyncronousFuncDelegate(AsyncronousFunc); // AsyncronousFuncを非同期実行するAsyncronousFuncDelegateオブジェクトasyncronousFuncを生成.

        // 非同期処理の完了後に実行するAsyncCallbackデリゲートcallbackの生成.
        AsyncCallback callback = new AsyncCallback(AsyncCallbackFunc);  // 非同期処理完了後にAsyncCallbackFuncを実行するAsyncCallbackオブジェクトcallbackを生成.

        // 非同期処理の実行.
        IAsyncResult iar = asyncronousFunc.BeginInvoke(callback, null);    // コンパイラによって生成されたasyncronousFunc.BeginInvokeで非同期実行し, 戻り値のIAsyncResultオブジェクトをiarに格納.(非同期実行完了後のコールバック関数callbackを渡す.)

        // 非同期処理の完了まで待機.
        asyncronousFunc.EndInvoke(iar); // asyncronousFunc.EndInvokeで完了まで待つ.(iarを渡す.)

        // AsyncCallbackFuncの処理が残ってるので3秒待つ.
        Thread.Sleep(3000); // Thread.Sleepで3秒休止.

        // "Finish!"と出力.
        Console.WriteLine("Finish!");   // "Finish!"と出力.
    }
Beispiel #3
0
    // Mainメソッドの定義
    static void Main()
    {
        // 変数の宣言・初期化.
        int result;         // 計算結果を格納するint型result.
        int refValue = 0;   // AsyncronousFuncに参照渡しで渡すint型refValueを0で初期化.

        // デリゲートの生成.
        AsyncronousFuncDelegate asyncronousFunc = new AsyncronousFuncDelegate(AsyncronousFunc); // AsyncronousFuncを非同期実行するAsyncronousFuncDelegateオブジェクトasyncronousFuncを生成.

        // 非同期処理の実行.
        IAsyncResult iar = asyncronousFunc.BeginInvoke(10, 20, ref refValue, null, null);    // コンパイラによって生成されたasyncronousFunc.BeginInvokeで非同期実行し, 戻り値のIAsyncResultオブジェクトをiarに格納.(引数として10, 20, refValueを渡す.)

        // "Calculating..."と出力.
        Console.WriteLine("Calculating...");    // "Calculating..."と出力.

        // 計算結果の取得.
        result = asyncronousFunc.EndInvoke(ref refValue, iar); // asyncronousFunc.EndInvokeで完了まで待って, 計算結果を取得する.(resultにもrefValueにも計算結果が格納されている.)

        // 計算結果の出力.
        Console.WriteLine("result = " + result);        // resultの値を出力.
        Console.WriteLine("refValue = " + refValue);    // refValueの値を出力.
    }
Beispiel #4
0
    // Mainメソッドの定義
    static void Main()
    {
        // デリゲートの生成.
        AsyncronousFuncDelegate asyncronousFunc = new AsyncronousFuncDelegate(AsyncronousFunc); // AsyncronousFuncを非同期実行するAsyncronousFuncDelegateオブジェクトasyncronousFuncを生成.

        // 非同期処理の実行.
        IAsyncResult iar = asyncronousFunc.BeginInvoke(null, null);    // コンパイラによって生成されたasyncronousFunc.BeginInvokeで非同期実行し, 戻り値のIAsyncResultオブジェクトをiarに格納.

        // 非同期処理の状態を監視.
        while (!iar.IsCompleted)    // iar.IsCompletedがfalseの時は繰りかえす.
        {
            // "AsyncronousFunc Running..."の出力.
            Console.WriteLine("AsyncronousFunc Running...");    // Console.WriteLineで"AsyncronousFunc Running..."を出力.

            // 1秒休止.
            Thread.Sleep(1000);    // Thread.Sleepで1000ミリ秒(1秒)休止.
        }

        // 非同期処理は完了しているのですぐ終わる.
        asyncronousFunc.EndInvoke(iar); // asyncronousFunc.EndInvokeで完了まで待つ.(iar.IsCompletedがtrueになり, ここに抜けてきてるので, すぐ終わる.)

        // "Finish!"の出力.
        Console.WriteLine("Finish!");   // Console.WriteLineで"Finish!"と出力.
    }
Beispiel #5
0
    // Mainメソッドの定義
    static void Main()
    {
        // デリゲートの生成.
        AsyncronousFuncDelegate asyncronousFunc = new AsyncronousFuncDelegate(AsyncronousFunc); // AsyncronousFuncを非同期実行するAsyncronousFuncDelegateオブジェクトasyncronousFuncを生成.

        // 非同期処理の実行.
        IAsyncResult iar = asyncronousFunc.BeginInvoke(null, null);    // コンパイラによって生成されたasyncronousFunc.BeginInvokeで非同期実行し, 戻り値のIAsyncResultオブジェクトをiarに格納.

        // "Main(1)"〜"Main(3)"を出力.
        for (int i = 1; i <= 3; i++)    // iが1から3まで繰り返す.
        {
            // "Main(i)"の出力.
            Console.WriteLine("Main(" + i + ")");   // Console.WriteLineで"Main(i)"を出力.

            // 1秒休止.
            Thread.Sleep(1000);    // Thread.Sleepで1000ミリ秒(1秒)休止.
        }

        // 非同期処理の完了まで待機.
        asyncronousFunc.EndInvoke(iar); // asyncronousFunc.EndInvokeで完了まで待つ.(iarを渡す.)

        // "Finish!"と出力.
        Console.WriteLine("Finish!");   // "Finish!"と出力.
    }