【发布时间】:2011-01-21 13:43:16
【问题描述】:
两天以来,我一直在尝试解决以下问题: 我有一个 WPF 控件,其中 WrapPanel 绑定到 ObservableCollection。一个动作会改变 ObservableCollection 的内容。内容在 BackgroundWorker 中加载。在导致内容更改的操作之后,新内容需要在 foreach 循环中立即执行。问题是内容的加载速度很慢,所以需要一点准备。
我的第一次尝试是等待后台工作程序,直到 IsBusy 属性设置为 false。但是 IsBusy 属性在等待期间从未改变! 第二次尝试是尝试直接从 BackgroundWorker 操作 ObservableCollection。当然没有成功,因为 ObservableCollection 位于 BackgroundWorker 之外的另一个线程中。
我读了很多关于如何在跨线程范围内操作内容的文章。但他们都没有工作。尝试使用 Dispatcher 解决方案,“ThreadSafeObservableCollection”,.....
谁能告诉我如何解决这个问题? 是否有一种简单的方法可以在另一个线程中编辑 UI 线程的内容? 或者我如何正确等待 BackgroundWorker 完成?
编辑: 但是我怎么能等待BackgroundWorker完成???
【问题讨论】:
标签: wpf multithreading mvvm backgroundworker dispatcher