BackgroundWorkerクラスは、Threadを明示的に使用せずに非同期タスクを記述できる便利なコンポーネントであって、想定されるパターンに従って普通に使う限りにおいては特に困ることはないのだが、裏には複雑なスレッドモデルインフラストラクチャが隠されており、時にそれが表面化することがある。
例えば次のようにボタン(button1)とRichTextBoxを1個づつ持っているFormがあって、 ボタンを押すと何か外部のコンポーネントがStartする。 そのコンポーネントからStream経由で非同期にデータが上がってくる。 BackgroundWorkerを用いてそのStreamからのデータ読み込みとRichTextBoxへの表示を行う。 ボタンを再度押すと、現在のStreamは捨て、別の外部コンポーネントをStartして同様に非同期データのRichTextBoxへの表示を行う。このとき、BackgroundWorkerを新たに作るのは無駄なので、一旦Cancelして再起動させる。 というアプリケーションを考える。
この仕...

まだコメントはありません。最初のコメントを登録してみませんか?