[解決済み] BackgroundWorkerとバックグラウンドスレッドの比較
質問
Windowsフォームアプリで使用すべきバックグラウンドスレッドの実装の選択について、スタイル上の質問があります。現在、私は
BackgroundWorker
を持つフォームに、無限大の
(while(true))
をループさせます。このループの中で
WaitHandle.WaitAny
で、何か面白いことが起こるまで、スレッドをスヌーズさせておくのです。私が待機しているイベントハンドルの1つは、"
StopThread
ループから抜け出せるように、" イベントを発生させます。このイベントは、私のオーバーライドされた
Form.Dispose()
.
どこかで読んだのですが
BackgroundWorker
は、ファイルのダウンロードや一連のアイテムの処理など、UI を縛りたくなく、終了が明確な操作のために用意されたものです。この場合、quot;end" は不明で、ウィンドウが閉じられたときだけです。したがって、以下の代わりにバックグラウンド・スレッドを使用するのがより適切でしょうか?
BackgroundWorker
を使用することができますか?
解決方法は?
ご質問の内容からすると、あなたは
BackgroundWorker
を標準のThreadとして使用します。
その理由は
BackgroundWorker
は UI スレッドに縛られたくない場合に推奨されます。これは Win Forms 開発の際にいくつかの素晴らしいイベントを公開するからです。
のようなイベント
RunWorkerCompleted
を使用して、スレッドが必要なことを完了したときにシグナルを送ります。
ProgressChanged
イベントを使用して、スレッドの進行状況についてGUIを更新します。
ということは、もし はありません。 を使用することで、標準的なスレッドを使用することに何の問題もないと思います。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] スレッドを強制終了させる方法はありますか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み】RxJavaスケジューラの使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMLにSystem.Stringを埋め込む
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] アセンブリから型を読み込めなかったエラー
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] ファイルまたはアセンブリ 'System.Data.SQLite' をロードできませんでした。
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] Nuget接続の試行に失敗しました。"Unable to load service index for source"。
-
[解決済み] 列挙型を文字列に変換する
-
[解決済み] LINQクエリでToList()とToArray()のどちらを呼び出すのが良いですか?