У меня есть проект 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 -