试图找到类似的东西,并阅读所有给出的答案,但无法找到将解释给我的东西。异步等待不等待
下面是打开对话框弹出窗口(WPF)的示例代码。在ShowOverlayView变为True后,我希望UI可以被访问(这就是异步等待的原因),并且程序要等到用户单击“Close”时完成。
小澄清: ShowOverlayViewModel为ContentControl的Visibility属性设置布尔值为true/false。既然是这样,那么我就没有什么可以等待“常规方式”了。
当前视图处于“可见”状态时,立即显示MessageBox。似乎它不会等待AutoResetEvent。
小更新:它似乎是特定于MessageBox。我尝试在await代码行之后更改Message属性,并且它仅在are.Set()后发生。我仍然很想知道为什么MessageBox会像它那样工作。
private void CommandAction()
{
ShowOptionsDialog();
MessageBox.Show("");
}
private async void ShowOptionsDialog()
{
var are = new AutoResetEvent(false);
var viewmodel = new DialogPopupViewModel();
viewmodel.Intialize("some title", "some message", DialogPopupViewModel.YesNoCancelButtons);
SetOverlayViewModel(viewmodel);
viewmodel.SetCloseViewAction(() =>
{
HideOverlayView();
are.Set();
});
ShowOverlayView = true;
await Task.Factory.StartNew(() =>
{
are.WaitOne();
//return viewmodel.DialogResult;
});
//return DialogResultEnum.Cancel;
}
感谢您的帮助
#usr - 我很想知道如何做到这一点。谢谢 –