Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wpf绑定:调用线程无法访问此对象,因为其他线程拥有它_Wpf_Multithreading - Fatal编程技术网

wpf绑定:调用线程无法访问此对象,因为其他线程拥有它

wpf绑定:调用线程无法访问此对象,因为其他线程拥有它,wpf,multithreading,Wpf,Multithreading,从视图模型属性引发NotifyPropertyChange事件后,我遇到此错误 作为测试,我在setter上添加了一个UI Dispatcher.Invoke调用,似乎暂时解决了这个问题 public FeedTrackingSummary SelectedFeedTracking { get { return _selectedFeedTracking; } set { Application.Current.Dispatcher

从视图模型属性引发NotifyPropertyChange事件后,我遇到此错误

作为测试,我在setter上添加了一个UI Dispatcher.Invoke调用,似乎暂时解决了这个问题

   public FeedTrackingSummary SelectedFeedTracking {
        get { return _selectedFeedTracking; }
        set { 
            Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => {
                _selectedFeedTracking = value; Notify("SelectedFeedTracking");
            }));
        }
    }
下面的SelectedFeedTracking是通过选择绑定到此属性的下拉值来设置的:

<ComboBox... SelectedItem="{Binding SelectedFeedTracking}"  />
一些MVVM框架(例如Caliburn.Micro)有一个基本的
NotifyPropertyChanged
类,该类自动将属性更改通知(通过引发
PropertyChanged
事件)封送到所谓的“UI线程”

因此,不要在每个属性设置器上调用
Application.Current.Dispatcher.Invoke
(…),而是将该代码放在
Notify()
方法中。因此,确保每次在ViewModel中通知属性更改时都在UI线程中进行。

一些MVVM框架(例如Caliburn.Micro)有一个基本的
NotifyPropertyChanged
类,该类自动将属性更改通知封送(通过引发
PropertyChanged
事件)到所谓的“UI线程”

因此,不要在每个属性设置器上调用
Application.Current.Dispatcher.Invoke
(…),而是将该代码放在
Notify()
方法中。因此,确保每次在ViewModel中通知属性更改时都在UI线程中这样做

        set { 
            SelectedCalc = -1;
        }