如果我理解正确地更改WPF中的任何控件(例如Label的文本),将在Dispatcher中排队更新。分派器等待我的代码完成,并等待它处理整个队列。WPF - 同步UI更新
为此,主叫
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");
其中ReportProgress调用一个事件与该事件处理程序
private void handlerProgressMade (object sender, ProgressEventArgs e)
{
pbProgress.Value = pbProgress.Maximum * e.Percent;
lbProgressMessage.Content = e.Message;
}
全进度和“完成”显示的消息结束,但intersteps未示出。
我知道它可以通过调用不同线程中的函数和异步更新UI(它将在某个时刻发生)来完成,但是现在添加线程看起来像是不必要的复杂化。
如何强制分派器立即更新和重绘?
我觉得你没有其他选择让它工作,你必须去线程......如果有工作,没有人会去线程..下面的链接可能会帮助你实现线程http://bathinenivenkatesh.blogspot .com/2011/07/wpf-build-more-responsive-ui.html – Bathineni
@bathineni我知道这可以通过线程完成。如果用户界面正在回应,这并不重要,只要报告进度就没有问题。 – Lukas
@Lukas ..可能是我错了..但对我来说,报告进展只是UI响应 – Bathineni