Как мне перехватить исключение в потоке GUI? - PullRequest
0 голосов
/ 22 сентября 2010

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

В настоящее время я упаковываю весь код OnPaint в try-catch и смог отладить код, но я нашел его довольно утомительным, поэтому я подумал, есть ли способ пробиться в отладчик из исключения потока GUI.

1 Ответ

2 голосов
/ 22 сентября 2010

По умолчанию это уже работает.Метод обработки исключений потока пользовательского интерфейса контролируется Application.SetUnhandledExceptionMode ().По умолчанию используется UnhandledExceptionMode.CatchException, так что событие ThreadException вызывается и по умолчанию создает ThreadExceptionDialog.

Однако, если отладчик подключен, он переопределяет этот режим.Так что исключение всегда будет необработанным, если нет активного предложения catch.Так что отладчик остановится, что позволит вам диагностировать проблему.Написав свой собственный метод try / catch, вы не позволяете этому работать.

Имейте в виду, что OnPaint () может быть особенным, особенно для PictureBox.У него есть предложение try / catch, перехватывающее необработанное исключение и рисующее красный крест.Это немного необычно, но необходимо, потому что оно поддерживает свойство ImageLocation.Что позволяет отображать изображения из потенциально ненадежного сетевого источника.Наилучший способ устранения неполадок в этом случае - с помощью «Отладка + исключения», отметьте флажок «Брошено».Это заставляет отладчик всегда останавливаться на исключении, даже если оно не обработано.

...