async warten nicht warten

Versucht, etwas Ähnliches zu finden und alle gegebenen Antworten zu lesen, konnte aber nichts finden, was es mir erklären würde.

Hier ist ein Beispielcode zum Öffnen eines Dialog-Popups (WPF). Nachdem ShowOverlayView auf "True" gesetzt wurde, soll die Benutzeroberfläche zugänglich sein (aus diesem Grund wird auf die Synchronisierung gewartet) und das Programm soll warten, bis der Vorgang abgeschlossen ist, wenn der Benutzer auf "Schließen" klickt.

Kleine Erläuterung: ShowOverlayViewModel setzt für die Visibility-Eigenschaft eines ContentControl einen Booleschen Wert auf true / false. Da dies der Fall ist, habe ich nichts auf "den normalen Weg" zu warten.

Zurzeit, wenn die Ansicht "sichtbar" ist, wird die MessageBox sofort angezeigt. Scheint, als würde es nicht auf das AutoResetEvent warten.

Kleines Update: Es scheint spezifisch für die MessageBox relevant zu sein. Ich habe versucht, die Message-Eigenschaft nach der Warte-Codezeile zu ändern, und sie ist erst nach dem are.Set () aufgetreten. Ich würde immer noch gerne wissen, warum die MessageBox so funktioniert hat.

    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;

    }

Danke für die Hilf

Antworten auf die Frage(2)

Ihre Antwort auf die Frage