Threadクラスでコールバック関数江お実行するには
-
2011年2月14日 9:22
Threadクラスを使ってマルチスレッドのアプリを作成中です。
スレッドの処理が終わったところで、コールバック関数を実行したいのですが、方法が分かりません。
何か方法は無いでしょうか。
すべての返信
-
2011年2月14日 11:06
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月15日 10:04
Join() のヘルプをみると、スレッドが終了するまで呼出元のスレッドがブロックされる、と書かれています。
要するに、Join() を実行したメインスレッドが止まってしまうと言うことでは無いのでしょうか。
もしそうなら、そもそもスレッドを分ける意味がないように思うのですが。
メインスレッドを実行しながら、別スレッドの終了を知りたいので、Join() では駄目なように思うのですが、
いかがでしょうか。 -
2011年2月15日 22:24
Join() を使うべきかどうかはシナリオ次第なので、あなたのシナリオに適した方法で同期処理を実装してください。
上記のコードは、このスレッドの主題である「引数付きの Thread プロシジャ呼び出しを持たない Compact Framework で、プライマリスレッドからワーカースレッドに対してどのように情報を渡すべきか」という問に答えるものです。

