Надстройка ArcGIS 10, над которой я работаю, довольно проста - всего лишь элемент управления инструментом и закрепляемое окно. Я обрабатываю конкретные исключения, которые, как я ожидаю, возникает в исходном коде и выбрасывает все остальное, но как лучше всего обрабатывать эти неожиданные исключения в структуре надстроек?
В настоящее время я просто делаю catch (System.Exception ex)
и показываю его в MessageBox в каждом методе, у которого нет метода более высокого уровня, с которым я мог бы справиться, но это не кажется лучшей практикой (и, конечно, FxCop скулил об этом).
Есть ли какая-либо возможность в структуре надстроек ArcGIS 10 для подключения обработчика исключений верхнего уровня, например, к событиям Application.ThreadException
или AppDomain.UnhandledException
?
Видя, что надстройки - это просто библиотеки классов, а не приложения, не имеющие доступа к коду запуска базового приложения (из того, что я понял, эти события нужно подключать очень рано в процессе запуска), я думаю, что нет, но я подумал Я бы спросил, есть ли у экспертов какие-либо предложения о том, как «неожиданные» исключения должны обрабатываться в надстройках.
источник
Ответы:
Насколько я могу судить, вы реализуете обработку ошибок, которую ESRI в настоящее время использует в качестве передового опыта. Если бы вы ухватились за необработанные исключения приложения ( ArcMap ), вы могли бы потенциально отображать сообщения об ошибках, которые не были частью вашего AddIn. Большинство надстроек вы пишете, вероятно , будет кнопка и те , действительно есть только два основных путь , что неожиданные ошибки будут пойманы и отображаются ( OnClick и OnUpdate ).
Просто не забудьте использовать « throw » вместо « throw ex ». Существует небольшая разница, но она приводит к сохранению происхождения ошибки, поскольку она всплывает из вызываемых функций.
источник
Я работаю с надстройкой ArcGIS. Моя надстройка состоит из закрепляемого окна и инструмента управления. Я пытаюсь вести журнал сбоя ArcGIS из-за моего инструмента. И я добился некоторого успеха при обработке исключений верхнего уровня с помощью Application.ThreadException. Поскольку исключение потока работает только для потока пользовательского интерфейса, после создания экземпляра закрепляемого окна, любое исключение, которое может стать причиной сбоя ArcGIS, оно улавливает, но не работает до создания экземпляра закрепляемого окна.
Это делает обработку исключений верхнего уровня после создания пользовательского интерфейса
источник