WPFのコントロール(ラベルのテキストなど)を正しく変更することがわかっている場合は、ディスパッチャの更新をエンキューします。ディスパッチャーは自分のコードが終了するのを待っています。WPF - 同期UIアップデート
このため、「完成」ReportProgressは、このイベントハンドラ
private void handlerProgressMade (object sender, ProgressEventArgs e)
{
pbProgress.Value = pbProgress.Maximum * e.Percent;
lbProgressMessage.Content = e.Message;
}
でイベントを呼び出す
double current = 0;
ReportProgress (0d, "ProcessingStarted");
foreach (var item in collection)
{
item.Process(); //takes about 10s
current++;
ReportProgress (current/(double)collection.Count, "Processing item No. " + current.ToString() + " finished");
}
ReportProgress (1d, "Finished");
がいっぱいプログレスバーとメッセージで終了呼び出しが表示されますが、interstepsは表示されません。
私は、別のスレッドで関数を呼び出して非同期的にUIを更新することで(これはある時点で起こる)、スレッドを追加することは不要な複雑さのようです。
Dispatcherに更新および再描画を強制する方法を教えてください。
あなたはそれを稼働させるための他の選択肢がないように思えます。あなたはスレッド化のために行かなくてはいけません。もし誰も周りの作業がなければ、スレッド化のために行くでしょう..次のリンクはスレッドhttp://bathinenivenkatesh.blogspot .com/2011/07/wpf-build-more-responsive-ui.html – Bathineni
@bathineniスレッドで行うことができます。 UIが応答している場合は重要ではなく、進捗状況の報告は問題ありません。 – Lukas
@ Lukas ..私は間違っているかもしれませんが、私にとって進捗状況は何もUIレスポンスではありません。 – Bathineni