我有一个拥有Windows数据网格的xaml文件。其Itemsource是关联的ViewModel中的属性。
在我的xaml的ViewModel类(即客户端)中,我使用消息API在服务器上调用方法M. (服务器使用.net Windows服务实现)。
此方法M内部使用.Net的Enqueue()
和 TPL(任务并行库)来执行该方法并将结果返回给客户端(使用消息API)。
只要在服务器上完成此方法,我就需要以编程方式更新ViewModel
中的属性。
我该如何做到这一点?
(问题是客户端在UI线程上向服务器发出请求。服务器在单独的线程上异步运行。)
提前致谢。
答案 0 :(得分:1)
对于标量属性,您不需要做任何事情。当你打电话给" OnPropertyChanged"该调用已经编组到UI线程。但是,遗憾的是,像ObservableCollections这样的某些类型不是线程安全的。因此,替代方案是使用类似this的线程安全集合,或者自己处理编组。基本上使用Dispatcher向UI线程调用一些代码。这是一个简单的例子:
App.Current.Dispatcher.Invoke(new Action(()=>
{
//The code I want to run on the UI thread.
}));