我有以下问题:我的应用程序进行了屏幕更新,之后应该制作新视图的屏幕截图。
代码如下:
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)”中进行。
调用“屏幕”设置器的方法遵循所有相同的方案:
//Do something
Screen = otherScreen;
History.ChangeHistory(ADD_ITEM);
//Do something else
这就是问题所在:屏幕截图是在屏幕更新之前制作的,尽管执行顺序说明了其他内容。
为了自己解决问题,我尝试了几件事:
在 ADD_ITEM 中忙等待 在 ADD_ITEM 中
按计时器
等待 通过 BeginInvoke() 和 EndInvoke() 等待 PropertyChangedEvent 的异步线程的
使用 System.Windows.Forms.Application.DoEvents() 的使用
所有尝试都有相同的结果:屏幕截图是在屏幕更新之前完成的。在尝试使用计时器时,我发现在执行 ADD_ITEM后屏幕会更新。所以我建议编译器做一些隐式线程,我不知道如何修复/防止它。
谢谢你的帮助。