Скрыть все видимые диалоги Metro, прежде чем показывать другой
я используюMahApps.Metro на моем проекте WPF, и я строю класс, чтобы помочь мне показатьДиалоги. Я хотел бы знать, есть ли способ закрыть все видимые диалоги, прежде чем открывать еще один.
Иногда, когда я показываюProgressDialog
а затемMessageDialog
ProgressDialog неправильно закрывается и остается в фоновом режиме, поэтому, когда я закрываю MessageDialog, он остается там, замораживая пользовательский интерфейс.
Вот как я сейчас пытаюсь скрыть все диалоги:
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>();
}
}
Я называю это так:
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]
}
Любая помощь приветствуется. Спасибо!
@РЕДАКТИРОВАТЬ
По-видимому, проблема, кажется, решена, благодаряТомас Фройденберг
Вот как это сейчас:
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>();
}
});
});
}
И я называю это так:
HideVisibleDialogs(parent).Wait();