Брошенное исключение не останавливает приложение - PullRequest
1 голос
/ 10 сентября 2009

Некоторые из исключений выбрасываются так:

throw new Exception( errMsg );

... doest действительно останавливает мою заявку!

Я ожидаю, когда я брошу бывшего. - приложение должно немедленно остановиться.
Но я заметил, что мое приложение выбрасывает одну бывшую. за другим (особенно при связывании) вместо прерывания в одно и то же время

EDIT_1:
У меня нет блока try-catch, когда он может быть перехвачен

EDIT_2:

Как уже упоминалось - это в основном происходит при связывании .

Например, у меня есть объектный геттер, проверяющий пользовательские привилегии ( GetValue метод) - если не вызывает исключение.
Я вижу в отладчике, что он выполняет , генерирует новый оператор Exception (...) , но приложения не останавливаются. Я также заметил, что исключения генерируются столько раз, сколько предметов находится в связанной коллекции ...

Есть идеи, как заставить прекратить связывание и вызвать реальное исключение ??

Пример кода для иллюстрации того, о чем я говорю

public  string  Name {
  get { return  GetValue( name, "Name"); }
}

Ответы [ 3 ]

6 голосов
/ 10 сентября 2009

Неизвестные исключения приведут к прекращению работы вашего приложения. Его дизайн (по крайней мере, после выпуска 2.0; 1.1 имел другое поведение, iirc).

Они называют это "неудачей быстро". Идея заключается в том, что если вы сгенерировали исключение, которое вы не ожидали (и, следовательно, отловили), ваше приложение находится в нестабильном состоянии. В этот момент лучше разбиться, чем продолжать хромать.

Привязки ведут себя по-разному, поскольку все операции привязки (в WPF) предназначены для перехвата всех исключений, а не для снятия вашего приложения. Почему они приняли это решение, команда WPF должна рассказать вам.

2 голосов
/ 10 сентября 2009

Исключения останавливают приложение, только если они остаются необработанными до самого конца текущего стека. Связывание WPF очень устойчиво к большинству исключений; вместо этого он регистрирует сбои в окне вывода и продолжает работу. Было ли это хорошим дизайнерским решением - вопрос для обсуждения ...

1 голос
/ 10 сентября 2009

Если я правильно вас понимаю: ваше приложение продолжит работу, если выброшенное исключение будет перехвачено как часть блока try / catch, или если вы установили обработчик перехвата исключения на уровне приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...