Oculte todos os diálogos de metrô visíveis antes de mostrar outro

estou a usarMahApps.Metro no meu projeto WPF e estou construindo uma classe para me ajudar a mostrarDiálogos. Gostaria de saber se existe uma maneira de fechar todas as caixas de diálogo visíveis antes de aparecer outra.

Às vezes, quando mostro umaProgressDialog e então umMessageDialog o ProgressDialog não está fechado corretamente e fica em segundo plano; portanto, quando fecho o MessageDialog, ele fica lá congelando a interface do usuário.

Aqui está como atualmente estou tentando ocultar todos os diálogos:

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>();
    }
}

Eu chamo assim:

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]
}

Qualquer ajuda é apreciada. Obrigado!

@EDITAR

Aparentemente, o problema parece estar resolvido, graças aThomas Freudenberg

É assim que é agora:

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>();
            }
        });
    });      
}

E eu chamo assim:

HideVisibleDialogs(parent).Wait();

questionAnswers(1)

yourAnswerToTheQuestion