Nat*_*n W 6 wpf multithreading dispatcher mvvm backgroundworker
好吧,这可能非常简单,但我尝试的一切似乎都打成了砖墙.
我有一个带有两个属性的视图模型,它们绑定到我的WPF表单:
bool IsWorking {get;set;}
ObservableCollection<OtherViewModel> PendingItems {get;set;}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,我调用从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();
Run Code Online (Sandbox Code Playgroud)
现在,worker_DoWork调用获取挂起项的方法并将它们添加到PendingItems集合中,所有内容都在后台运行,UI仍然响应,但在尝试添加到集合时,我得到了正常的交叉线程错误.我在调度程序调用中包装了更改集合的代码:
// Update to show the status dialog.
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Render,
new Action(delegate()
{
this.PendingItems.Add(\\Blah);
})
);
Run Code Online (Sandbox Code Playgroud)
但它仍然会抛出相同的交叉线程错误.
我对线程不是很好,所以我不知道我可能做错了什么,有人能帮我一把吗?
| 归档时间: |
|
| 查看次数: |
7627 次 |
| 最近记录: |