2010-01-11 2 views
0

Вот мой контекст:Как добавить глобальную обработку исключений в DLL надстройки?

  • Я пишу WPF надстройки для приложения.
  • Главный поток этого приложения неуправляем.
  • Я хочу добавить глобальную систему обработки исключений для этой надстройки для обработки любых необработанных исключений.

Вот что я пытался, но не работает:

  • Я не могу добавить примерки поймать блок на мой Application.Run() строки кода. Поскольку я являюсь надстройкой, этот фрагмент кода находится в приложении.
  • System.Windows.Forms.Application.ThreadException тоже не работает. Возможно, не существует приложения WinForm. (WPF-хостинг в неуправляемом коде.)
  • AppDomain.CurrentDomain.UnhandledException тоже не работает. Потому что, возможно, это обрабатывается самим Приложением. Он просто не вводит мой код.

Таким образом, любые идеи для этой ситуации?

ответ

0

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

Теперь, что вы можете сделать, это обернуть каждый метод, вызываемый извне, в вашу надстройку с помощью try блок-блок, это, очевидно, не поддается контролю, но система АОП, такая как PostSharp, может легко добавить их для вас, сохраняя код обработки в хорошем центральном месте.

+0

Благодарим за ответ. Вы правы, я не должен добавлять глобальную обработку исключений для этого приложения. Но есть ли способ добавить «глобальную» систему обработки исключений только в область моего добавления - только исключения, которые моя надстройка переместила в эту систему. Добавить блоки try-catch только для моих записей недостаточно, потому что у меня есть куча поведения в моем графическом интерфейсе надстройки. Еще раз спасибо за ваш вопрос. – redjackwong

+0

Вы можете использовать PostSharp для автоматического добавления поведения try-catch ко всем вашим кодовым кодам в свойствах, конвертерах, поведении и пользовательских/пользовательских элементах управления, поэтому это должно охватывать большинство случаев, у меня нет хорошего решения для исключенных исключений чей-то код внутри вашего графического интерфейса – Nir

-1
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
Смежные вопросы