我开始一个新的线程,并试图通过我的视图模型中定义的属性来更新UI元素,我能够做到没有任何错误,但是如果我尝试通过代码隐藏更新UI元素,它会抛出已知的UI访问错误(“调用线程不能访问此对象,因为不同的线程拥有它。”)。第一个问题是......这两种方法之间有什么区别?第二个问题是当我在ViewModel中理想地使用Disptacher时?在WPF中,MVVM模板中不需要Dispatcher吗?
代码后面
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属性称为点击 公共无效ExecuteCommand(obj对象) { InvokeCallThroughAnonymousDelegateThread(); }
private void InvokeCallThroughAnonymousDelegateThread()
{
ThreadStart start = delegate()
{
UserInput = "Calling from diff thread";
};
new Thread(start).Start();
}