2016-03-08 4 views
0

Я попытался реализовать DialogManager, как описано here. Я не использую калибр, поэтому я немного переработал, и это уже не SimpleDialog, а CustomDialog, но изменений не было.ShowMetroDialogAsyncdoesn't показывает диалог при ожидании задачи

Так что теперь, когда я нажимаю кнопку, которая вызывает 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 является модальным и отображается на оверлете окна Owning. – Peter

+0

Диалог mahApps по дизайну ** не ** модальный, это асинхронный, вы просто не можете щелкнуть что-нибудь еще, потому что оно лежит перед окном. Но в любом случае, да, вы правы, я мог бы просто использовать главное окно, хотя я не думаю, что это ничего не меняет, потому что я снова получаю экземпляр главного окна. –

ответ

1

Вы упомянули task.Wait(). Если вы запустили задачу, чтобы показать диалог, я боюсь, вы не сможете этого сделать. Графический интерфейс является однопоточным. Вы все еще можете ожидать результата, просто нужно инициировать его из основного потока, а не задачи.

+0

Да, вы совершенно правы, должно быть очевидно - не знаю почему я не пришел к такому выводу: D –