更新viewModel中的属性

时间:2015-06-11 17:31:45

标签: c# wpf multithreading task-parallel-library

我有一个拥有Windows数据网格的xaml文件。其Itemsource是关联的ViewModel中的属性。

在我的xaml的ViewModel类(即客户端)中,我使用消息API在服务器上调用方法M. (服务器使用.net Windows服务实现)。

此方法M内部使用.Net的Enqueue() TPL(任务并行库)来执行该方法并将结果返回给客户端(使用消息API)。

只要在服务器上完成此方法,我就需要以编程方式更新ViewModel中的属性。 我该如何做到这一点?

(问题是客户端在UI线程上向服务器发出请求。服务器在单独的线程上异步运行。)

提前致谢。

1 个答案:

答案 0 :(得分:1)

对于标量属性,您不需要做任何事情。当你打电话给" OnPropertyChanged"该调用已经编组到UI线程。但是,遗憾的是,像ObservableCollections这样的某些类型不是线程安全的。因此,替代方案是使用类似this的线程安全集合,或者自己处理编组。基本上使用Dispatcher向UI线程调用一些代码。这是一个简单的例子:

App.Current.Dispatcher.Invoke(new Action(()=>
{ 
    //The code I want to run on the UI thread.
}));