私はシングルスレッドプログラム(リサイズMEH)を書いて、それがこのように振る舞うことを期待しています:バックグラウンドワーカーなしでUIが時間通りに更新されないのはなぜですか?
- のMainFormを進捗表示形式
- 進捗フォームが追加されますoperationStarted完全
- 進捗フォームreceievesイベントをレンダリングされます開始します
- 長時間動作開始
- 進行状況は、イベントoperationCompletedまたはoperationFailedを受け取り、適切なイメージを設定します。
何が起こるのは面倒です。
- のMainFormを進捗表示形式
- が進捗フォームが完全にレンダリングされていません開始します!
- プログラムは、長期的な操作が完了したUIの更新
である場合にはしばらく
これは
private bool Run(int commandIndex, string fullCommand)
{
if (operationStarted != null)
operationStarted(commandIndex);
// start long lasting external process
if (exitCode != 0)
{
if (operationFailed != null)
operationFailed(commandIndex, Error);
return false;
}
if (operationCompleted != null)
operationCompleted(commandIndex);
return true;
}
operationStarted必要に応じて、コードを低下& operationCompletedをOperationFailedがされているが、適切な画像を更新するように正しく設定されています。
BackGroundWorkerが必要です。_long lasting_操作がUIと同じスレッドで実行されているため、UIがリフレッシュされないようにスレッドがブロックされます。 – Pikoh
問題は、プログラムが次々と動作するため、進行状況表示を開始し、その後もそのレンダリングによって長続きする操作が開始され、操作が中断されます。この操作が完了すると、UIを表示し続けます。あなたは別のスレッドでこれを行うBackgroundworkerをネーミングします –