私は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);
}));
}
これを実現する手段はありますか? ところで、Thread.Sleepの代わりにMessageBox.Show(...)を使用すると、すべてのメッセージボックスでビューが更新されます。
*あなたのviewmodelはターンでも、それが変更されたことをビューに通知することができると考えてはいけない*「...それが変わったのというのviewmodelを伝えます」イベント駆動型アップデートやタイマー駆動型ループの必要性を排除しますか? – slugster
そのため、 "OnPropertyChanged(" Background ");"ビューとのバインドが機能します。アップデートは実際には動作しますが、Thread.SleepではUIスレッドをブロックして更新しないと思います。私は別のアプローチを探しています。 –