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