У меня есть проект wpf, в котором я использую INotifyPropertyChanged для свойства, которое привязывается к текстовому полю. Я обновляю это значение в другом потоке, используя задачу (TaskParallelLibrary). Он обновляется должным образом и не выдает исключение. Я думал, что это вызовет исключение, потому что он работает в фоновом потоке, а не в потоке интерфейса пользователя. Конечно, это вызывает исключение, если я непосредственно использую элемент пользовательского интерфейса. Итак, механизм связывания INotifyPropertyChanged обеспечивает автоматическую диспетчеризацию потока пользовательского интерфейса?
Вот мой код со свойством.
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 <TextBox Name="txtBox" Text="{Binding TextProperty}"/>