2010-03-08 85 views
0

我正尝试创建一个状态窗口,其内容(文本框)应该在漫长的操作中更改。 从主应用程序调用并更新此状态窗口。 不幸的是,内容仅在操作结束时更新。 我正在使用VS2008,C#和WPF。wpf c#状态窗口更新

谢谢。

+0

你的问题到底是什么? – 2010-03-08 08:50:56

回答

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”,取决于在情况下),并且调用委托可能会更新您的文本框(因为它与文本框位于同一线程中)。

+0

BackgroundWorker已经支持进度更新(通过BackgroundWorker.ProgressChanged)。为什么要用Dispatcher Invoke/BeginInvoke添加另一个间接级别? – micahtan 2010-03-10 01:01:51

1

如果您正在调用一项服务并且该调用是同步的,那么主应用程序将无法更新。你需要把它们放在不同的线程上。另外,如果服务调用获得更高的优先级(UI线程总是优先级较低),则需要强制指示系统更新这些优先级。

1

如何通过使用Dispatcher在BackgroundWorker线程中执行冗长的操作并每隔一段时间通知内容?它会给你的用户界面带来一种反应迅速的进步感觉。

+0

你能举个例子说明如何做到这一点? – phm 2010-03-08 08:53:06