我正在使用MVVM,当模型计算一个位置的新背景时,它会告诉视图模型它已更改。所以我想要做的是在每个新的背景下更新视图,但我认为Thread.Sleep会阻止主UI线程。WPF在循环中更新视图
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,它会更新每个消息框处的视图。
*“......它告诉视图模型,它的改变” *你不觉得你的视图模型可以反过来也通知认为它已经改变,无需事件驱动的更新或定时器驱动的循环? – slugster
这就是为什么有“OnPropertyChanged(”背景“);”行,所以与视图的绑定起作用。更新实际上是有效的,但对于Thread.Sleep,我认为我阻止了UI线程,因此它不会更新。我正在寻找另一种方法。 –