1

プログレス バーを使用する場合、UI スレッドで実行されますか? UI スレッドで実行されている長いタスクの進行状況バーをどのように表示するのか疑問に思ったので質問します。

開いて完全にレンダリングするのに時間がかかるウィンドウがいくつかあり、何かが起こっていることをユーザーに示す何かが必要です。それらの一部はせっかちで、UI が 1/4 秒間応答しなくなると、狂ったようにクリックし始めます。

つまり、長いプロセスは、必ずしもバックグラウンド スレッドで実行したいものではありません。この場合、プログレス バーをどのように表示しますか?

4

3 に答える 3

2

GUI スレッドで を使用してプログレス バーを更新できるようにすることもできますApplication.DoEvents()が、これは再入力の問題とパフォーマンスのためにお勧めできません。
あなたの最善の策は、実際にはバックグラウンド スレッドです。
これは、System.Threading.BackgroundWorkerクラスを使用する .NET フレームワークで特に簡単になります。バックグラウンド ワーカーに関する MSDN ヘルプ

于 2011-05-19T18:17:06.623 に答える
2

実行時間の長い操作の場合は、バックグラウンド スレッドに属します。ただし、主な操作が UI 要素と対話する操作である場合は、わずかな遅延が発生する可能性があります。

ただし、プロセスを UI ( MVC ) から分離してバックグラウンド スレッドで実行できるようにすることはおそらく可能であり、推奨されることに注意してください。

于 2011-05-19T18:24:09.933 に答える
0

UI スレッドで時間のかかるタスクを実行し、同時に進行状況バーを表示できます。

ただし、プログレス バーの Win7/Vista アニメーションは失われ、メッセージ ループを 5 秒間実行しないと、Windows はアプリに「応答なし」のラベルを付けます。

BackgroundWorkerプログレス バーは、 (特別なイベントがあります) と UI スレッドで実行されている関数の両方から更新できます。後者の場合、プログレス バーを更新するために呼び出すことができるデリゲートを渡します。

もう 1 つ: UI スレッドで実行する場合、メッセージ ポンプがブロックされているため、簡単に [キャンセル] ボタンを実装できません。

したがってBackgroundWorker、長いタスクには a をお勧めします。短いタスクには、Gabe がコメントで提案したように、スプラッシュ スクリーンを使用することをお勧めします。

于 2011-05-19T18:24:23.570 に答える