【发布时间】:2016-10-05 15:49:07
【问题描述】:
我有一个 MVVM (C#/WPF) 应用程序,想在后台线程中创建和填充我的 ViewModel(使用 INotifyPropertyChange)和 ObservableCollections。
如果这样做,我会得到一个异常:“必须在与 DependencyObject 相同的线程上创建 DependencySource。”
我知道如何使用 Dispatcher 在 UI 线程中移动操作。但我不清楚什么必须转移到 UI 线程。我有以下5个案例。
var vm = new ViewModel(); // implements INotifyPropertyChangevm.Name = "name"; // Fires PropertyChangevar oc = new ObservableCollection<ViewModel>();oc.Add(vm);-
var oc2 = new ObservableCollection<ViewModel>(list); // while list is List of ViewModel
【问题讨论】:
-
“我不清楚什么必须移动到 UI 线程”:从引发异常的任何内容开始。
-
我认为如果您在后台线程上修改对象之前freeze 对象,您可以这样做。 Check out this post
-
“我有以下 5 个案例”——这是什么意思。使用后台线程的代码在哪里,是哪一行抛出错误?
-
这些行之一不会直接引发异常。它是由“消费代码”抛出的
标签: c# wpf multithreading mvvm