C# 我可以在后台线程中创建或填充ViewModels和ObservableCollection吗?
我有一个MVVM(C#/WPF)应用程序,希望在后台线程中创建和填充我的ViewModels(使用INotifyPropertyChange)和ObservableCollections 如果我这样做,我会得到一个异常:“必须在与DependencyObject相同的线程上创建DependencySource。”C# 我可以在后台线程中创建或填充ViewModels和ObservableCollection吗?,c#,wpf,multithreading,mvvm,C#,Wpf,Multithreading,Mvvm,我有一个MVVM(C#/WPF)应用程序,希望在后台线程中创建和填充我的ViewModels(使用INotifyPropertyChange)和ObservableCollections 如果我这样做,我会得到一个异常:“必须在与DependencyObject相同的线程上创建DependencySource。” 我知道如何使用Dispatcher在UI线程中移动操作。但我不清楚什么必须转移到UI线程。我有以下5个案例 var vm=new ViewModel();//实现INotifyProp
我知道如何使用Dispatcher在UI线程中移动操作。但我不清楚什么必须转移到UI线程。我有以下5个案例
var vm=new ViewModel();//实现INotifyPropertyChange
vm.Name=“Name”//激发属性更改
var oc=newobserveCollection()代码>
oc.Add(vm)代码>
var oc2=新的ObservableCollection(列表);//而列表是ViewModel的列表
您不能在非
调度程序
线程上调用ObservableCollection.Add()
您可以在非调度程序
线程上创建可观察收集
只要构造函数中没有任何Dispatcher
-仅调用,那么在哪个线程上创建ViewModel
对象并不重要
更新有关PropertyChanged事件的评论:
您需要在Dispatcher
线程上引发PropertyChanged
事件,以便对其进行处理。我发现在这些情况下,将事件的引发包装在Dispatcher.Invoke()
调用中非常有用
针对具体案例的答案更新
- 情况1:可以在任何线程上,只要构造函数中没有特定于
的调用李>
- 案例2:如果希望事件由任何绑定控件处理,则应在
上引发李>Dispatcher
- 案例3:可以在任何线程上李>
- 案例4:必须在
李>调度程序上
- 案例5:可以在任何线程上
- 案例2:如果希望事件由任何绑定控件处理,则应在