Alle sichtbaren Metro-Dialoge ausblenden, bevor ein anderer angezeigt wird

Ich benutze MahApps.Metro in meinem WPF-Projekt, und ich erstelle eine Klasse, die mir hilft, @ zu zeig Dialoge. Ich würde gerne wissen, ob es eine Möglichkeit gibt, alle sichtbaren Dialogfelder zu schließen, bevor ein anderes angezeigt wird.

Manchmal, wenn ich ein @ zeiProgressDialog und dann einMessageDialog Der ProgressDialog wird nicht korrekt geschlossen und bleibt im Hintergrund. Wenn ich den MessageDialog schließe, bleibt er dort und friert die Benutzeroberfläche ein.

So versuche ich derzeit, alle Dialoge auszublenden:

public static async void HideVisibleDialogs(MetroWindow parent)
{
    BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();

    while (dialogBeingShow != null)
    {
        await parent.HideMetroDialogAsync(dialogBeingShow);
        dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
    }
}

Ich nenne es so:

public static MessageDialogResult ShowMessage(String title, String message, MetroWindow parent, Int32 timeout, MessageDialogStyle style, MetroDialogSettings settings, MessageDialogResult defaultResult)
{
    AutoResetEvent arEvent = new AutoResetEvent(false);

    App.Current.Dispatcher.Invoke(() =>
    {
        HideVisibleDialogs(parent);
        arEvent.Set();
    });

    arEvent.WaitOne();

    [Rest of method]
}

Jede Hilfe wird gebeten. Vielen Dank

@BEARBEITE

Anscheinend scheint das Problem gelöst zu sein, dankThomas Freudenberg

So ist es jetzt:

public static Task HideVisibleDialogs(MetroWindow parent)
{
    return Task.Run(async () => 
    {
        await parent.Dispatcher.Invoke(async () =>
        {
            BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();

            while (dialogBeingShow != null)
            {
                await parent.HideMetroDialogAsync(dialogBeingShow);
                dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
            }
        });
    });      
}

Und ich nenne es so:

HideVisibleDialogs(parent).Wait();

Antworten auf die Frage(2)

Ihre Antwort auf die Frage