2016-03-08 135 views
0

我试图实现像here那样的DialogManager。我没有使用caliburn,所以我重构了一下,也不再是SimpleDialog,而是CustomDialog,但没有大的变化。ShowMetroDialogAsync在等待任务时不显示对话框

所以现在当我点击一个叫DialogManager.ShowDialog的按钮并且等待task.Wait()产生的任务时,应用程序只会冻结(等待等待),但不显示对话框。我试图调试,但它工作正常,直到行

await Application.Current.Windows.OfType<MetroWindow>().First().ShowMetroDialogAsync(dialog); 

。对话框是有效的BaseMetroDialog,我从Application.Cur...调用中获得正确的窗口。当我仅仅拨打ShowMessageAsync时,也会发生这种情况,所以问题似乎与呼叫和等待任务有关。有没有办法阻止下面的执行(强制对话框是模态)?

如果您需要其他信息,请评论,我会延长这个问题,但现在我不知道要显示什么,除了已经链接在一开始的代码。

+0

为什么不使用Application.Current.MainWindow.ShowMetroDialogAsync ...?你的'Application.MainWindow'不是'MetroWindow'吗?请注意,通过设计,MahApps的对话框是模态的,并显示在所属窗口的叠加层上。 – Peter

+0

mahApps对话框是由设计**不是**模式,它是异步的,你只是不能点击任何东西,因为它位于窗口前面。但无论如何,是的,你是对的我可以使用主窗口,但我不认为这会改变任何东西,因为我也得到主窗口实例。 –

回答

1

你提到task.Wait()。如果您开始显示对话框的任务,恐怕您无法做到这一点。 GUI是单线程的。您仍然可以等待结果,只需从主线程启动,而不是任务。

+0

是的,你是完全正确的,应该是明显的 - 不知道为什么我没有得出这个结论:D –