locked
Threadクラスでコールバック関数江お実行するには

    質問

  • Threadクラスを使ってマルチスレッドのアプリを作成中です。
    スレッドの処理が終わったところで、コールバック関数を実行したいのですが、方法が分かりません。
    何か方法は無いでしょうか。

    2011年2月14日 9:22

すべての返信

  • using System;
    using System.Threading;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Worker worker = new Worker();

                worker.Callback = Program.Callback;

                Thread thread = new Thread(worker.DoSomething);

                thread.Start();

                thread.Join();
            }

            static void Callback(int value)
            {
                Console.Out.WriteLine("Callback: " + value);
            }
        }

        delegate void CallbackDelegate(int value);

        class Worker
        {
            public CallbackDelegate Callback;

            public void DoSomething()
            {
                // do something...

                this.Callback(100);
            }
        }
    }

    とか。

     

    2011年2月14日 11:06
  • Join() のヘルプをみると、スレッドが終了するまで呼出元のスレッドがブロックされる、と書かれています。
    要するに、Join() を実行したメインスレッドが止まってしまうと言うことでは無いのでしょうか。
    もしそうなら、そもそもスレッドを分ける意味がないように思うのですが。
    メインスレッドを実行しながら、別スレッドの終了を知りたいので、Join() では駄目なように思うのですが、
    いかがでしょうか。

    2011年2月15日 10:04
  • Join() を使うべきかどうかはシナリオ次第なので、あなたのシナリオに適した方法で同期処理を実装してください。

    上記のコードは、このスレッドの主題である「引数付きの Thread プロシジャ呼び出しを持たない Compact Framework で、プライマリスレッドからワーカースレッドに対してどのように情報を渡すべきか」という問に答えるものです。

    2011年2月15日 22:24