Wpf 任务并行库INotifyPropertyChanged未引发异常?

Wpf 任务并行库INotifyPropertyChanged未引发异常?,wpf,inotifypropertychanged,task-parallel-library,Wpf,Inotifypropertychanged,Task Parallel Library,我有一个wpf项目,我在绑定到文本框的属性上使用INotifyPropertyChanged。我正在使用task(TaskParallelLibrary)在不同的线程上更新此值。它已正确更新,不会引发异常。我想它会抛出一个异常,因为它是在后台线程而不是UI线程上运行的。当然,如果我直接使用UI元素,它会引发异常。那么,INotifyPropertyChanged绑定机制是否负责自动分派到UI线程 这是我的代码和属性 private string _textProperty = ""; p

我有一个wpf项目,我在绑定到文本框的属性上使用INotifyPropertyChanged。我正在使用task(TaskParallelLibrary)在不同的线程上更新此值。它已正确更新,不会引发异常。我想它会抛出一个异常,因为它是在后台线程而不是UI线程上运行的。当然,如果我直接使用UI元素,它会引发异常。那么,INotifyPropertyChanged绑定机制是否负责自动分派到UI线程

这是我的代码和属性

private string _textProperty = "";
    public string TextProperty
    {
        get
        {
            return _textProperty;
        }
        set
        {
            if (_textProperty != value)
            {
                _textProperty = value;
                NotifyPropertyChanged("TextProperty");
            }
        }
    }
我的任务是创建

var task = new Task(() =>
        {
            TextProperty = "ABCD"; // Works.
            // txtBox.Text = "ABCD"; // Throws an exception.
        });
        task.Start();

XAML中的文本框是

绑定到单个属性不是线程仿射的。您可以毫无问题地执行此操作,绑定将为您执行必要的操作。
但是请注意,这仅适用于单个属性绑定。例如,如果您有一个ObservableCollection,则无法从另一个线程添加或删除项,即使该集合是通过绑定绑定的

我想它会抛出一个异常,因为它是在后台线程而不是UI线程上运行的

WPF允许您在后台线程上设置绑定值。它将为您处理到UI线程的封送处理


但是,请注意,这不适用于集合的元素。例如,如果要添加到绑定的
ObservableCollection
,则必须封送回UI线程。然而,如果需要,有一些方法可以缓解这种情况。请注意,这将在将来简化WPF中的多线程开发。

+1。WPF4.5的有趣链接。看起来他们已经解决了我目前不喜欢WPF的一些问题。@里德,你手头有WPF如何为你整理更新的参考资料吗?