WPF后台工作线程DoWork和ProgressChanged

时间:2014-05-02 11:36:47

标签: wpf multithreading

我已经使用后台工作程序实现了一个WPF应用程序,我将数据从数据库分配到组合框。

我已将可观察集合用作组合框的ItemSource。

当我尝试在后台工作程序的DoWork方法中填充可观察集合时,UI没有得到更新,但如果我将相同的代码移动到ProgressChanged或RunWorkerCompleted,那么它工作正常。

我想知道为什么DoWork方法没有更新UI。另外,更新UI的逻辑应该是ProgressChanged还是RunWorkerCompleted?

2 个答案:

答案 0 :(得分:0)

引用MSDN:"您必须小心不要操纵DoWork事件处理程序中的任何用户界面对象" - 所以在你的DoWork方法中调用ReportProgress事件并在ProgressChanged事件处理程序中更新你的ui

答案 1 :(得分:0)

有许多在线示例显示如何正确使用BackgroundWorker。由于您没有费心向我们展示您的代码,我们所能做的只是猜测,但我猜您还没有正确实现您的代码。不想再次复制此代码,我建议您在Stack Overflow上查看我对Progress Bar update from Background worker stalling 问题的答案。

它清楚地演示了如何正确实现BackgroundWorker