ViewModel和多线程最佳实践

时间:2014-09-06 17:22:59

标签: multithreading mvvm

我想了解一些有关使用MVVM和多线程的最佳实践。我们假设我有一个ViewModel并且它有一个observableCollection。另外,让我们假设我将此集合传递给另一个服务类,该服务类进行一些计算,然后对我的集合进行udpates。

在一点之后,我意识到我想让它成为一个多线程的电话。当我使用线程或任务调用服务类时,结果是跨线程操作。原因很明显,因为服务类更新了集合,反过来会更新后台线程上的UI。

在这种情况下,最佳做法是什么?我们是否应该始终以这样的方式编写我们的服务类:它首先克隆输入然后更新克隆的副本?或者视图模型是否应始终认为服务调用可能是多线程的并发送克隆副本?

解决这个问题的推荐方法是什么?

由于

Jithu

1 个答案:

答案 0 :(得分:1)

可能解决跨线程异常的解决方案是在所有ViewModel的基类中实现OnPropertyChanged以切换到正确的线程/同步上下文,以便View中绑定到更改属性的所有属性都将具有处理程序调用正确的线程。请参阅:Avoid calling BeginInvoke() from ViewModel objects in multi-threaded c# MVVM application

如果/当您创建副本时,您正在推迟同步,并且在许多情况下,使其变得比需要更难。

Web服务将始终返回新对象,您或框架如何使用这些对象更新模型取决于您。很多将取决于检查和更新的数量。没有推荐的方式,看看适合应用程序的要求。