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