Любой способ поймать исключения из любого порожденного потока? - PullRequest
2 голосов
/ 16 января 2012

Я занимаюсь разработкой приложения с поддержкой плагинов.Плагины могут быть разработаны сторонними разработчиками.

В настоящее время у меня есть обработчик try / catch для любых вызовов в плагины, чтобы попытаться защитить мое приложение от стороннего кода.Уловка регистрирует проблему, но не приводит к сбою моего приложения.

Моя проблема заключается в том, что сторонний код порождает потоки для выполнения некоторой работы.Мой обработчик их не перехватывает.

Есть ли способ отловить исключения из "всего, что порождено этой функцией"?Или мне нужно просто перехватить их в моем глобальном обработчике?

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Когда плагин выходит из строя и запускается в одном и том же домене приложений, лучше всего позволить приложению завершиться ошибкой; Таким образом, остановить приложение. Вы не будете знать, в каком состоянии находится приложение, когда плагин падает.

Другой вариант - запустить плагин в своем (дочернем) AppDomain. Таким образом, вы можете выгрузить этот домен приложения и перезапустить этот плагин во вновь созданном домене приложений без необходимости перезапуска приложения.

Возможно, вы захотите взглянуть на Managed Extensibility Framework (MEF). Это специально разработано для этих сценариев.

2 голосов
/ 16 января 2012

Что касается вашего второго желания - перехватывая исключение в глобальном обработчике, вы можете подписать событие UnhandledException в домене приложения. Он поймает все исключения, которые не были пойманы в вашем коде.

Используется в основном для регистрации информации об исключении. Однако это не спасет ваше приложение от прекращения.

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