我正在尝试创建一个状态窗口,其内容(文本框)应该在冗长的操作中更改。 从主应用程序调用并更新此状态窗口。 不幸的是,内容仅在操作结束时更新。 我正在使用VS2008,C#和WPF。
谢谢。
答案 0 :(得分:3)
这是另一个允许更好格式化的答案:
代码应该像这样:
BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.RunWorkerCompleted += new
RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
bgWorker.RunWorkerAsync();
在bgWorker_DoWork
方法中,调用“Dispatcher.Invoke
”(或“Dispatcher.BeginInvoke
”,具体取决于具体情况),并且调用的委托可能会更新您的文本框(因为它位于与文本框相同的线程。)
答案 1 :(得分:1)
如果您正在呼叫服务并且呼叫是同步的,则主应用程序无法更新任何机会。你需要将它们放在不同的线程上。此外,如果服务调用获得更高的优先级(UI线程总是优先级较低),则需要强制告诉系统更新这些优先级。
答案 2 :(得分:1)
如何在BackgroundWorker线程中进行冗长的操作,并使用Dispatcher每隔一段时间通知一次内容?它会为您的UI提供响应而又渐进的感觉。