私は、テキストボックスにバインドするプロパティでINotifyPropertyChangedを使用しているwpfプロジェクトを持っています。タスク(TaskParallelLibrary)を使用して別のスレッドでこの値を更新しています。これは正しく更新され、例外はスローされません。 UIスレッドではなくバックグラウンドスレッドで実行されているため、例外がスローされると思っていました。もちろん、私はUI要素を直接使用すると例外がスローされます。したがって、INotifyPropertyChangedバインドメカニズムはUIスレッドへのディスパッチを自動的に処理しますか?タスク並列ライブラリ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}"/>
+1。 WPF 4.5への興味深いリンク。彼らは私がWPFについて嫌いなことをいくつか整理したようです。 – RichardOD
@Reed wpfがアップデートをどのように管理しているかを参考にしてください。 –