асинхронное ожидание не ждет
Пытался найти что-то похожее и прочитать все ответы, но не смог найти то, что мне это объяснит.
Вот пример кода для открытия всплывающего диалогового окна (WPF). Я хочу после того, как ShowOverlayView превратится в True, что пользовательский интерфейс будет доступен (вот почему async-await) и программа будет ждать, пока он не закончится, когда пользователь нажмет «Закрыть».
Небольшое пояснение: ShowOverlayViewModel устанавливает логическое значение true / false для свойства Visibility ContentControl. Так как это так, то мне нечего ждать "обычного пути".
В настоящее время, когда представление «видимое», MessageBox сразу отображается. Похоже, он не ждет AutoResetEvent.
Небольшое обновление: Похоже, что это относится к MessageBox. Я попытался изменить свойство Message после строки кода await, и это произошло только после 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;
}
Спасибо за помощь