作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MahApps.Metro在我的 WPF 项目中,我正在构建一个类来帮助我展示 Dialogs . 我想知道是否有一种方法可以在显示另一个对话框之前关闭所有可见对话框。
有时,当我显示一个 ProgressDialog
然后显示一个 MessageDialog
时,ProgressDialog 没有正确关闭,而是停留在后台,所以当我关闭 MessageDialog 时,它停留在那里卡住 UI。
这是我目前试图隐藏所有对话框的方式:
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]
}
感谢任何帮助。谢谢!
@编辑
貌似问题好像解决了,感谢Thomas Freudenberg
现在是这样的:
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();
最佳答案
HideVisibleDialogs
是一种异步方法。我尝试将其返回类型更改为 Task
并等待它,即 HideVisibleDialogs(parent).Wait()
。否则调用将立即返回。
关于c# - 在显示另一个之前隐藏所有可见的 Metro 对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37789431/
我是一名优秀的程序员,十分优秀!