2013-01-05 21 views
7

Pracuję nad projektem C# i chcę skorzystać z wyjątku Nieobsługiwany wyjątek, aby wychwycić wyjątki, które mogłem pominąć w moim projekcie (mając nadzieję, że nie będzie żadnych, ale będzie po tej samej stronie).AppDomain Nieobsługiwany wyjątek

Tworzę sporo oprogramowania, więc chcę stworzyć bibliotekę klas, której wszystkie moje projekty wykorzystam, więc chcę mieć jedną funkcję, która wykonuje wszystkie czynności inicjalizacyjne wszystkich moich projektów bez konieczności skopiuj i wklej kod do każdego projektu, aby wykonać tę samą pracę.

Co Zastanawiam się czy mam w bibliotece klasie nieobsługiwany zdarzenie wyjątku za pomocą następującego kodu

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

Czy nieobsługiwany wyjątek być używany tylko z wnętrza klasy biblioteki czy będzie to uchwyt wydarzeniem będzie również exeucted z wszelkich projektów, które odwołują się do biblioteki klas.

Dziękujemy za pomoc.

Odpowiedz

5

Zakładając, że wszystkie Twoje projekty są uruchomione w tym samym appdomain, to będzie działać poprawnie. Mamy dokładnie ten kod zamknięty we wspólnej bibliotece DLL, która jest dzielona między liczne aplikacje.

Dodatkowa sugestia: jeśli jest używana w aplikacjach Windows Forms, prawdopodobnie chcesz również dodać procedurę obsługi dla System.Windows.Forms.Application.ThreadException. Jest to funkcja ochronna, gdy na przykład ktoś zapomni dodać obsługę wyjątku do zdarzenia kontrolnego.

+0

Dzięki za pomoc. Jest to aplikacja konsolowa, nad którą pracuję, ale nie powiem o wyjątku ThreadException dla formularzy. Czy tak jest również w przypadku aplikacji WPF lub po prostu starych formularzy okien w stylu – Boardy

1

Istnieje możliwość załadowania zespołu do innej domeny aplikacji, ale tak długo, jak ładuje się zespoły (takie jak biblioteki klas) do bieżącej domeny aplikacji, będzie to obsługiwać wyjątek.

związku między domenami aplikacji i zespoły:

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

Przykładowo Assembly.LoadFile() lub Assembly.Load() ładuje zespół do bieżącej domenie aplikacji.

Twój kod może być stworzenie nowej aplikacji domenę z:

AppDomain.CreateDomain(..), to może załadować zespoły w tej dziedzinie, które nie byłyby obsługiwane przez kodzie.

Jeśli odwołasz się do bibliotek w projekcie, zostaną załadowane do bieżącej domeny aplikacji.