Ocultar todos los cuadros de diálogo visibles de Metro antes de mostrar otro

Estoy usandoMahApps.Metro en mi proyecto WPF, y estoy creando una clase para ayudarme a mostrarCuadros de diálogo. Me gustaría saber si hay una manera de cerrar todos los diálogos visibles antes de mostrar otro.

A veces, cuando muestro unProgressDialog y luego unMessageDialog el ProgressDialog no se cierra correctamente y permanece en segundo plano, por lo que cuando cierro el MessageDialog, permanece allí congelando la IU.

Así es como estoy tratando de ocultar todos los cuadros de diálogo:

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

Lo llamo así:

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

Cualquier ayuda es apreciada. ¡Gracias!

@EDITAR

Aparentemente, el problema parece estar resuelto, gracias aThomas Freudenberg

Así es como es ahora:

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

Y lo llamo así:

HideVisibleDialogs(parent).Wait();