Tôi có một dự án wpf, nơi tôi đang sử dụng INotifyPropertyChanged trên một thuộc tính liên kết với hộp văn bản. Tôi đang cập nhật giá trị này trên một chủ đề khác bằng cách sử dụng tác vụ (TaskParallelLibrary). Nó được cập nhật đúng cách và KHÔNG ném một ngoại lệ. Tôi đã nghĩ rằng nó sẽ ném một ngoại lệ bởi vì nó đang chạy trên một sợi nền và không phải là chủ đề giao diện người dùng. Ofcourse nó là ném một ngoại lệ nếu tôi trực tiếp sử dụng các yếu tố giao diện người dùng. Vậy, cơ chế ràng buộc INotifyPropertyChanged có tự động gửi đến giao diện người dùng UI không?Thư viện tác vụ song song INotifyPropertyChanged KHÔNG ném một ngoại lệ?
Đây là mã của tôi với thuộc tính.
private string _textProperty = "";
public string TextProperty
{
get
{
return _textProperty;
}
set
{
if (_textProperty != value)
{
_textProperty = value;
NotifyPropertyChanged("TextProperty");
}
}
}
và tạo nhiệm vụ của tôi là
var task = new Task(() =>
{
TextProperty = "ABCD"; // Works.
// txtBox.Text = "ABCD"; // Throws an exception.
});
task.Start();
và hộp văn bản trong XAML là <TextBox Name="txtBox" Text="{Binding TextProperty}"/>
+1. Liên kết thú vị với WPF 4.5. Có vẻ như họ đã sắp xếp một số thứ tôi không thích về WPF. – RichardOD
@Reed nào bạn có một tham chiếu hữu ích cho cách wpf marshals cập nhật cho bạn? –