次の問題があります: 私のアプリケーションは画面更新を行い、その後新しいビューのスクリーンショットを作成する必要があります。
コードは次のとおりです。
public ViewModelBase Screen {
get {
if (_screen == null) {
Screen = new DataSourceChooserScreenViewModel(this);
History.ChangeHistory(ADD_ITEM);
}
return _screen;
}
set {
_screen = value;
OnPropertyChanged("Screen");
System.Windows.Forms.Application.DoEvents();
}
}
画面更新は「OnPropertyChanged("Screen")」で行い、スクリーンショットは「History.ChangeHistory(ADD_ITEM)」で取得します。
「Screen」のセッターを呼び出すメソッドは、すべて同じスキームに従います。
//Do something
Screen = otherScreen;
History.ChangeHistory(ADD_ITEM);
//Do something else
そしてここに問題があります: スクリーンショットは画面が更新される前に作成されますが、実行順序は別のことを示しています。
自分で問題を解決するために、いくつかのことを
試し
まし
た
。
すべての試行で同じ結果が得られました。スクリーンショットは、画面が更新される前に行われました。思いついたタイマーの使い方を試してみると、 ADD_ITEMを実行した後に画面が更新されてしまいます。したがって、コンパイラーが暗黙的なスレッド化を行うことをお勧めしますが、それを修正/防止する方法がわかりません。
ご協力いただきありがとうございます。