3

私はマルチタブソフトウェアを持っています。すべてのタブで、異なるスレッドを実行したいと考えています。あるタブから別のタブに切り替えると、関連するスレッドを一時停止してから、新しいタブの新しいスレッドを開始します。

タブをすばやく変更すると、スレッドの実行が停止し、例外やエラーが発生しないことがあります。デバッグでこの状況を理解しています。この状況では、「スレッド ウィンドウ」に表示される同じスレッドが多数あることがわかりますが、どれも実行されていません。

スレッドの中断と開始はプログラミングの良い考えではないと思いますが、この問題を回避するにはどうすればよいですか?

4

2 に答える 2

3

通常の設計では、1つのUIスレッドと複数のワーカースレッドを使用します。

  • 実行するタスクがあるときに開始され、タスクが完了すると「消える」
  • 一部のイベント(つまり、キューに追加されたアイテム)に応答するために、バックグラウンドで永続的に実行されています
于 2012-05-09T08:14:39.123 に答える
3

「私はマルチタブソフトウェアを持っています。」

いいよ。

「すべてのタブで、異なるスレッドを実行したい」

各タブには、そのタブとのみ相互作用する独自のスレッドインスタンスがあることを意味していると思います。OK、結構です、それは珍しいデザインではありません。たぶん、あなたは各タブで異なるウェブサイトと対話します、そのようなもの。それで大丈夫です。

「あるタブから別のタブに切り替えると、関連するスレッドを一時停止してから、新しいタブの新しいスレッドを開始します」

良くないですよ!なぜあなたはこれをやっている?タブを切り替えるだけではいけませんか?他のスレッドは、非表示のページで(Invoke / BeginInvokeを使用して)コンポーネントを更新し続けることができ、元に戻すと、変更が表示されます。

おい!コーダー!それらのスレッドはそのままにしておきます!

'タブをすばやく変更すると、スレッドの実行が停止し、例外やエラーが発生しないことがあります。私はこの状況をデバッグで理解しています。この状況では、「スレッドウィンドウ」に表示されるのと同じスレッドが多数あるが、どれも実行されていないことがわかります。

驚かない。タブごとに1つのスレッドを開始し、それが何をするにしても、そのままにしておくだけです。

「スレッドの一時停止と開始はプログラミングの良い考えではないと思いますが、この問題を回避するにはどうすればよいですか?」

やめて!ユーザーレベルでのスレッドのマイクロ管理は、ほとんどの場合、災害で終わります。

于 2012-05-09T09:27:54.787 に答える