我使用两个线程,一个在WPF中用WPF询问用户问题,
另一个我想隐藏的MessageDialog,如何在下面的代码中隐藏MessageDialog中的HideMessageDialog()?
我在做一些需要打断这个问题,同时保持主窗口打开的事情。所以,我需要一种方法来隐藏对话框后,真正显示。
public void Execute()
{
Task showAsk = new Task(ShowAskingDialog);
Task hideAsk = new Task(HideAskingByCode);
showAsk.Start();
hideAsk.Start();
}
public async void ShowAskingDialog()
{
Thread.Sleep(3000);
this.MetroDialogOptions.ColorScheme = MetroDialogColorScheme.Accented;
var msgbox_settings = new MetroDialogSettings {
AffirmativeButtonText = "I know", NegativeButtonText = "I don't know" };
// puase at asking MessaageDialog
var isKnow = await this.ShowMessageAsync(
"Question", "Do you know WPF?",
MessageDialogStyle.AffirmativeAndNegative, msgbox_settings);
}
public void HideAskingByCode()
{
Thread.Sleep(5000);
//How to Hide the MessageDialog by code, not by user click Button?
HideMessageDialog();
}MessageDialog将显示如下所示,嵌入主窗口:

发布于 2017-09-13 07:09:55
感谢@Nobody和答案,
隐藏MessageDialog可以使用通用HideMetroDialogAsync()
public void HideMessageDialog ()
{
this.Dispatcher.Invoke(
async () =>{
BaseMetroDialog dialogBeingShow =
await this.GetCurrentDialogAsync<BaseMetroDialog>();
//Hide Current Single Dialog
if(dialogBeingShow != null)
await this.HideMetroDialogAsync(dialogBeingShow);
//Or Hide All Dialogs
while (dialogBeingShow != null)
{
await this.HideMetroDialogAsync(dialogBeingShow);
dialogBeingShow =
await this.GetCurrentDialogAsync<BaseMetroDialog>();
}
}
);
}https://stackoverflow.com/questions/46189603
复制相似问题