2016-03-08 68 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 –

相關問題