2013-01-05 2 views
7

Я работаю над проектом C# и хочу использовать событие UnhandledException, чтобы поймать любые исключения, которые я, возможно, пропустил в своем проекте (надеясь, что их не будет, но будет на одной стороне).AppDomain UnhandledException

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

То, что я интересно, если у меня есть в библиотеке классов необработанное событие исключения, используя следующий код

AppDomain currentDomain = AppDomain.CurrentDomain; 
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 

Будет ли необработанное исключение будет использоваться только внутри библиотеки классов или это ручка событие также вызывается из любых проектов, которые ссылаются на библиотеку классов.

Спасибо за любую помощь, которую вы можете предоставить.

ответ

5

Предполагая, что все ваши проекты запущены в одном домене, это будет работать правильно. У нас есть этот точный код, инкапсулированный в общую DLL, которая разделяется между многочисленными приложениями.

Дополнительное предложение: если это используется в приложениях Windows Forms, возможно, вы также захотите добавить обработчик для System.Windows.Forms.Application.ThreadException. Это служит блокировкой, когда, например, кто-то забывает добавлять обработку исключений в событие управления.

+0

Благодарим за помощь. Его для консольного приложения, над которым я работаю, но я сделаю не о методе ThreadException для форм. Это также относится к приложениям WPF или только к формам окон старого стиля – Boardy

1

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

Взаимосвязь между доменами приложений и сборок:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

Например, Assembly.LoadFile() или Assembly.Load() будет загрузить сборку в текущий домен приложения.

Ваш код может создать новый домен приложения с:

AppDomain.CreateDomain(..), то он может загружать сборки в этой области, которые не будут обрабатываться вашим кодом.

Если вы ссылаетесь на библиотеки в своем проекте, они будут загружены в текущий домен приложения.

Смежные вопросы