【发布时间】:2017-04-02 11:29:11
【问题描述】:
我正在使用 MVVM,当模型为某个位置计算新背景时,它会告诉视图模型它已更改。所以我想做的是在每个新背景下更新视图,但我认为 Thread.Sleep 会阻塞主 UI 线程。
private void New_Background(object sender, BackgroundEventArgs e)
{
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
Fields[e.Position].Background = e.Background; //update this position's background at every step
OnPropertyChanged("Background");
Thread.Sleep(50);
}));
}
有什么方法可以实现吗? 顺便说一句,如果我使用 MessageBox.Show(...) 而不是 Thread.Sleep,它会更新每个消息框的视图。
【问题讨论】:
-
"...它告诉 viewmodel 它已经改变了" 你不认为你的 viewmodel 也可以反过来通知视图它已经改变,从而消除了需要用于事件驱动的更新或计时器驱动的循环?
-
这就是为什么会有“OnPropertyChanged("Background");"行,因此与视图的绑定有效。更新确实有效,但使用 Thread.Sleep,我想我阻塞了 UI 线程,所以它不会更新。我正在寻找另一种方法。
标签: c# wpf multithreading mvvm