新しいスレッドを開始し、View Model で定義されたプロパティを介して UI 要素を更新しようとしていますが、エラーなしで実行できますが、コード ビハインドを介して UI 要素を更新しようとすると、既知の UI アクセス エラーがスローされます(「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。」) 最初の質問は..2つのアプローチの違いは何ですか? 2 番目の質問は、いつ ViewModel で Disptacher を理想的に使用するかということです。
コードビハインド
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread th = new Thread(new ThreadStart(delegate()
{
textbox.Text = "Rajib";
}
));
th.Start();
}
//inside XAML
<TextBox x:Name="textbox" Text="{Binding UserInput, Mode=TwoWay}" />
MVVM
public string UserInput
{
get { return _UserInput; }
set { _UserInput = value; OnPropertyChanged("UserInput"); }
}
//ボタンのクリック時に ICommand プロパティを介して呼び出されます public void ExecuteCommand(object obj) { InvokeCallThroughAnonymousDelegateThread(); }
private void InvokeCallThroughAnonymousDelegateThread()
{
ThreadStart start = delegate()
{
UserInput = "Calling from diff thread";
};
new Thread(start).Start();
}