tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: BackgroundWorkerを複数使用する
投稿日: 2011/09/21(Wed) 03:34
投稿者魔界の仮面弁士
> マルチスレッドの「BackgroundWorker」の利用を勉強しています。
ワーカースレッドが UI スレッドに干渉しないように注意してくださいね。
(DoWork イベントから TextBox を読み書きしたり、フォームのフィールド変数を
複数のスレッドで共有するような作りにしてはいけないということです)


> 処理に“それぞれ”別のBackgroundWorkerを使用するのが良いのでしょうか?
> (フォームデザイン上、複数のBackgrounWorkerが配置されている状態)
それでも構いませんし、実行時に動的に BackgroundWorker を生成することもできます。

また、DoWork が数多く記述されるとしても、同時に実行されるスレッド数が
さほど多くない(数個程度)のであれば、AddHandler / RemoveHandler を利用して
使用済みの BackgroundWorker を別の処理で使いまわすことも一応可能です。


> 作成するアプリケーションによっては、場合によって、極端な話し、
話し→話

> 10個・100個の複数のBackgroundWorkerが配置されているモノもあるのでしょうか?
デザイン時に配置するということは、配列等は用いず、すべて別の変数名になりますね。
100 個も配置されていたら管理が追い付かなくなるので、個人的には NG としたいです。

まぁ、それは BackgroundWorker に限った話では無いのですけれども。
(たとえば、Timer を100個貼ったフォームや、DataGridView 100 個とかも避けたいところ)

100個のうち何個までが同時実行(並列稼働)の対象となるのかは分かりませんが、
それぞれがまったく異なる作業を行うような場合には、処理内容に応じて、
ある程度の作業グループごとに分け、フォーム以外のクラスを作成して
管理したほうが良いかも知れません。
また、その過程で BackgroundWorker 以外の選択肢が併用されることもありそうです。

たとえば Web Service を使っているのであれば、Web メソッドの Async バージョンを
利用できますし、あるいは自分で Thread を生成するのも手かと思います。
あるいは ADO.NET 2.0 の非同期コマンド実行とか、非同期 IO 用メソッドとか。


> そのような時間のかかる処理は、多くて5個程だと言う事をイメージしています。
> (つまり、5個のBackgroundWorkerを配置しようと検討しています)
5 個程度なら問題ないと思いますよ。CPU が 5 コア以上なら尚良し。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。