- スレッド間の値の受け渡しには以下のような方法が考えられる。
- ThreadクラスのStart()前にプロパティを設定(スレッド起動時のみ)
- 共通で参照できるフィールドを使用。キューなどを併用してもよい(基本的に同クラス内の別スレッド間の場合)
- イベントを使用(別クラスの別スレッド間)
- コールバックを使用(別クラスの別スレッド間)
// スレッドクラス
public class subThread
{
private string msg;
private int wait;
private getCompleteCode callback;
// コンストラクタ
public subThread(string msg, int wait, getCompleteCode callbackProcDelegate)
{
this.msg = msg;
this.wait = wait;
// ★☆コールバック関数をメンバのデリゲートに設定★☆
callback = callbackProcDelegate;
}
public void wThread()
{
Console.WriteLine(this.msg);
Thread.Sleep(this.wait); // 待つ
// ★☆コールバック関数をデリゲートを使用してコール★☆
callback(wait + 10);
}
}
// デリゲートの宣言:完了コードの取得
public delegate void getCompleteCode(int completeCode);
// メインスレッド
class Program
{
static void Main(string[] args)
{
Thread thread;
// オブジェクトの作成
// ★☆第3引数で、コールバック用のメソッドをデリゲートで指定★☆
subThread sub = new subThread("ワーカスレッド開始.", 1000,
new getCompleteCode(completeCode));
// スレッドを作成
thread = new Thread(new ThreadStart(sub.wThread));
// スレッドを開始する
thread.Start();
}
// コールバックメソッド
public static void completeCode(int completeCode)
{
Console.WriteLine("完了コード={0}.", completeCode);
}
}
最終更新:2009年10月24日 13:35