【发布时间】:2016-07-07 01:11:06
【问题描述】:
试图找到类似的东西并阅读所有给出的答案,但找不到可以向我解释的东西。
以下是打开对话框弹出窗口 (WPF) 的示例代码。我希望在 ShowOverlayView 变为 True 之后,UI 将是可访问的(这就是 async-await 的原因)并且程序等待用户单击“关闭”时完成。
小说明: ShowOverlayViewModel 将 ContentControl 的 Visibility 属性的布尔值设置为 true/false。既然是这种情况,那么我没有什么可以等待“常规方式”的。
当前,当视图“可见”时,MessageBox 会立即显示。 似乎它不等待 AutoResetEvent。
小更新:似乎与 MessageBox 相关。我试图在等待代码行之后更改 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 - 我很想知道如何做到这一点。谢谢
标签: wpf async-await messagebox