thread作成前に準備しておくこと

  • threadとして動作させる関数:threadStart()
  • thread名         :do_thread

threadの作成

Thread登録

Thread do_thread = new Thread(new threadStart());

Threadの起動(バックグラウンドで動作させる場合)

do_thread.IsBackground = true;
do_thread.Start();

Threadの停止

通常方法

do_thread.Join();

強制終了

do_thread.Abort();

MSおススメ

スレッド対象関数をbool値を使い実行するか制御する
// スレッドの対象クラスの作成
class threadWorker{
   private volatile bool _shuldstop;
   public threadWorker(){
      //コンストラクタ
   _shuldstop = false;
   }
   public void doWork(){
     if(!_shuldstop){ 
        //スレッド処理
     }
   }
   public void requestStop(){
     _shuldstop = ture;
   }
}
 
// 実際に動作させる
//スレッド関数の作成
threadWorker workerObject = new threadWorker();
//Thread登録
Thread workerThread = new Thread(workerObject.doWork());
//Threadスタート
workerThread.Start();
//スレッド内部動作のストップ
workerObject.requestStop();
//Joinで終了
workerThread.Join();

スレッドセーフな呼び出し(スレッドからUIを操作など)

  • [文法 C#編]のデリゲートを参照
  • MSのホームページを参考
    • UI操作を行う関数の作成
delegate void setTextCallback(string msg , string title , int num);
public void ChangeMessage(string msg , string title , int num){
	if(InvokeRequired){
		setTextCallback d = new setTextCallback(ChangeMessage);
		this.Invoke(d , new object[]{msg , title , num});
	}
	else{
		this.label_msg.Text = msg;
		switch(num)
		{
			case 1:
				this.label_title1.Text = title;
				break;
			case 2:
				this.label_title3.Text = title;
				break;
			case 3:
				this.label_title3.Text = title;
				break;
			default:
		}
	}
}
 




最終更新:2009年04月17日 10:42