タイトル : Re^6: マルチスレッドでスレッドを何度も実行する方法を教えてください 投稿日 : 2007/07/17(Tue) 18:18 投稿者 : 魔界の仮面弁士
> ・その他の判断、処理CheckBox1のStatusで中止指示するなどTrue=中止) 監視方向を逆にした方が良いと思いますよ。 メインスレッドがワーカスレッドの状態を逐次監視していたのでは、 いくらスレッドを分けたとしても、処理が十分に分散化されないでしょうし。 たとえば、 『CheckBox1.Checked の値 True/False に応じて、 Label1.BackColor を 赤/青 に切り替える』 という処理を実装することになったら、以下のどちらの方法で実装しますか? (案1) [フォームが CheckBox1 の状態を監視する手法] ループ中で DoEvents しながら CheckBox1.Checked の値を監視して、 それに応じて、Label1.BackColor の色を切り替える。 (案2) [CheckBox1 が、状態変化をフォーム側に通知する手法] CheckBox1 の CheckedChanged イベントのたびに CheckBox1.Checked の値を見て、 それに応じて、Label1.BackColor の色を切り替える。 ……通常は 案2 の方だと思いますが、それと同じことです。 非同期処理を中断させたいなら、たとえばデリゲートを使って、 メインがワーカに「中止依頼」を投げる形にするとか、あるいは ワーカが定期的に「続行/中止を確認するイベント」を発行し、 メインがそれに答えるなどの仕様にした方が良いかと思います。 |