|
分類:[C#]
いつも参考にさせて頂いており、ありがとうございます。
別スレッド内でのコントロールへの代入について教えて頂けないでしょうか?
フォームに貼り付けた StatusStrip に別スレッドから代入したいので Invoke を使い 下のようにコーディングしたところ、代入自体は上手くいくのですがスレッドが終了 しない場合が発生します、StatusStrip への代入処理を行わなければスレッドは直ちに 終了するようです。
なぜ、Invoke を使ったコントロールへの代入を行うとスレッドが終了しないケースが 発生するのでしょうか?
(.Net 2008)
private bool Stop = false; private System.Threading.Thread WorkerThread; private delegate void InvokeDelegate(object _Object);
private void Initial() { WorkerThread = new System.Threading.Thread(new System.Threading.ThreadStart(Worker)); WorkerThread.IsBackground = true; WorkerThread.Start(); }
private void Worker() { while (Stop == false) { StatusStrip.Invoke(new InvokeDelegate(delegate(object _String) { StatusStrip.Items[0].Text = (string)_String; }), new object[] { System.DateTime.Now.ToString("yy/MM/dd") }); System.Threading.Thread.Sleep(200); } }
//プログラムを終了させる private void button1_Click(object sender, EventArgs e) { Stop = true; WorkerThread.Join(); this.Dispose(); } }
|