我正尝试创建一个状态窗口,其内容(文本框)应该在漫长的操作中更改。 从主应用程序调用并更新此状态窗口。 不幸的是,内容仅在操作结束时更新。 我正在使用VS2008,C#和WPF。wpf c#状态窗口更新
谢谢。
我正尝试创建一个状态窗口,其内容(文本框)应该在漫长的操作中更改。 从主应用程序调用并更新此状态窗口。 不幸的是,内容仅在操作结束时更新。 我正在使用VS2008,C#和WPF。wpf c#状态窗口更新
谢谢。
这是另一种答案,以便更好地格式化:
代码应该喜欢漂亮的多是这样的:
BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.RunWorkerCompleted += new
RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
bgWorker.RunWorkerAsync();
在bgWorker_DoWork
方法,称之为“Dispatcher.Invoke
”(或“Dispatcher.BeginInvoke
”,取决于在情况下),并且调用委托可能会更新您的文本框(因为它与文本框位于同一线程中)。
BackgroundWorker已经支持进度更新(通过BackgroundWorker.ProgressChanged)。为什么要用Dispatcher Invoke/BeginInvoke添加另一个间接级别? – micahtan 2010-03-10 01:01:51
如果您正在调用一项服务并且该调用是同步的,那么主应用程序将无法更新。你需要把它们放在不同的线程上。另外,如果服务调用获得更高的优先级(UI线程总是优先级较低),则需要强制指示系统更新这些优先级。
如何通过使用Dispatcher在BackgroundWorker线程中执行冗长的操作并每隔一段时间通知内容?它会给你的用户界面带来一种反应迅速的进步感觉。
你能举个例子说明如何做到这一点? – phm 2010-03-08 08:53:06
你的问题到底是什么? – 2010-03-08 08:50:56