アットウィキロゴ

スレッド同士の情報受け渡し

  • スレッド間の値の受け渡しには以下のような方法が考えられる。
    • 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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。