Я пытаюсь обрабатывать исключения в диалоговом окне, чтобы при возникновении какого-либо исключения диалог закрывался и приложение не выпадало бы из строя. Как вы можете видеть, я использую простой примерку поймать блок:Ошибка в CanExecute() - как избавиться от диалога?
IDialogView dialog = null;
try
{
if (_dialogViewModel == null)
{
dialog = ViewFactory.SomeDialog();
_dialogViewModel = new DialogViewModel(dialog);
_dialogViewModel.LoadData();
}
_dialogViewModel.ShowDialog();
}
catch (Exception ex)
{
if (dialog != null)
dialog.Close();
_dialogViewModel = null;
MessageBox.Show("Sorry, there was an error in the dialog.", "Error",
MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
Проблема происходит, когда возникает ошибка в обработчике события CanExecute()
кнопки. Ошибка успешно поймана, но когда я показываю пользователю MessageBox
, CanExecute()
выполняет снова, и поэтому ошибка повторяется снова. В итоге это приводит к сбою приложения.
У меня есть информация о googled, и, как говорили, убедитесь, что в обработчике событий CanExecute()
нет исключений. Но что-то подобное может произойти где-то в другом месте, и именно поэтому я хочу просто перехватить ВСЕ исключения в точке входа в диалог, не работая с каждым методом.
Итак, мой вопрос: как разрушить диалог, чтобы после исключения catch он больше не будет отображаться? Close()
не работал, потому что перед закрытием все еще звонки CanExecute()
.
Что такое ошибка, которая происходит в 'CanExecute'? Возможно, это должно быть исправлено? –
Вы можете попробовать отключить события на кнопке, т. Е. Удалить обработчик события Button.Click(). – Steztric
Да, я прочитал предложение исправить ошибку или удалить обработчик. Но таким образом каждая ошибка может быть исправлена или устранена по-своему, но проблема в том, что сначала необходимо найти ошибку. Ошибка будет исправлена, но я хочу, чтобы мое приложение не вылетало в следующий раз, когда произошло какое-то пропущенное исключение. – STiLeTT