Multithreading ViewModel和多线程最佳实践

Multithreading ViewModel和多线程最佳实践,multithreading,mvvm,Multithreading,Mvvm,我想了解一些关于使用MVVM和多线程的最佳实践。假设我有一个ViewModel,它有一个observableCollection。另外,让我们假设我将此集合传递给另一个服务类,该服务类执行一些计算,然后UDPATE我的集合 经过一段时间后,我意识到我想让它成为一个多线程调用。当我使用线程或任务调用服务类时,结果是一个跨线程操作。原因很明显,因为服务类更新集合,而该集合反过来将更新后台线程上的UI 在这种情况下,最佳做法是什么?我们是否应该始终以这样的方式编写服务类:它首先克隆输入,然后更新克隆的

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

经过一段时间后,我意识到我想让它成为一个多线程调用。当我使用线程或任务调用服务类时,结果是一个跨线程操作。原因很明显,因为服务类更新集合,而该集合反过来将更新后台线程上的UI

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

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

谢谢


Jithu

解决跨线程异常的一个解决方案是在所有ViewModels的基类中实现OnPropertyChanged,以切换到正确的线程/同步上下文,这样视图中绑定到正在更改的属性的所有属性都将在正确的线程上调用其处理程序。见:

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

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