試圖找到類似的東西,並閱讀所有給出的答案,但無法找到將解釋給我的東西。異步等待不等待
下面是打開對話框彈出窗口(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 - 我很想知道如何做到這一點。謝謝 –