асинхронное ожидание не ждет

Пытался найти что-то похожее и прочитать все ответы, но не смог найти то, что мне это объяснит.

Вот пример кода для открытия всплывающего диалогового окна (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;

    }

Спасибо за помощь

Ответы на вопрос(1)

Ваш ответ на вопрос