好吧,这可能真的很简单,但我尝试的一切似乎都碰壁了。
我有一个具有两个属性的视图模型,它们绑定到我的 WPF 表单:
bool IsWorking {get;set;}
ObservableCollection<OtherViewModel> PendingItems {get;set;}
我有一个方法可以从 Outlook 中获取一些新的待处理项目,但是我也可以在表单上显示某种进度(旋转进度条),进度条可见性绑定到 ViewModel 上的 IsWorking 属性,并且网格绑定到 PendingItems 集合。
我希望能够将 IsWorking 设置为 true,以便 UI 可以显示进度条,在后台运行工作,然后在完成后将 IsWorking 设置为 false,以便进度条消失。
我创建了一个像这样的后台工作者:
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
现在,worker_DoWork 调用获取挂起项目并将其添加到 PendingItems 集合中的方法,所有内容都在后台运行,UI 仍然响应,但在尝试添加到集合时出现正常的交叉线程错误。我将更改集合的代码包装在调度程序调用中:
// Update to show the status dialog.
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Render,
new Action(delegate()
{
this.PendingItems.Add(\\Blah);
})
);
但它仍然引发相同的跨线程错误。
我不太擅长线程,所以我不知道我可能做错了什么,有人可以帮我解决这个问题吗?