2010-04-29 19 views
7

Mam aplikację WinForm z pewnymi zależnościami w bibliotece zewnętrznej, która może powodować wyjątek poza kontekstem uruchomionych wątków. W obecnej formie jest to całkowicie OK (no, oczywiście z wyjątkiem wyjątku) i podłączyliśmy AppDomain.CurrentDomain.UnhandledException, aby po prostu ponownie uruchomić program.Zapobieganie wyświetlaniu okna dialogowego "[nazwaProgramy] przestał działać" na nieobsługiwanych wyjątkach

Jedyny problem to, że [Twój program] przestał działać jak poniżej, pojawi się: alt text http://telcontar.net/store/archive/CrashGallery/images/crash/vista/2007-05-30%20Microsoft%20Register%20Server.png

Czy istnieje sposób, aby zapobiec tego okna pojawianiu się w ogóle, czy to w AppDomain nieobsługiwany wyjątek program do obsługi lub w konfiguracji, ponieważ użytkownicy końcowi nie będą go czytać, a zasoby są przechowywane tylko do momentu kliknięcia.

+0

AFAIK, to okno dialogowe jest wyświetlane tylko wtedy, gdy aplikacja kończy działanie w sposób nienormalny (na przykład nieobsługiwany wyjątek). Czy na pewno nieobsługiwany moduł obsługi wyjątku działa poprawnie we wszystkich przypadkach? – rmeador

+0

Tak i nie. Masz rację, okno dialogowe jest spowodowane nieobsłużonym wyjątkiem i tak, * obsługa wyjątków AN * nie obsługuje tego. Jednak kod, który jest wyjątkiem, jest w usłudze hostowanej WCF i jako taka aplikacja WinForm obsługująca usługę WCF ostatecznie nie ma kontroli nad wyjątkiem, z wyjątkiem zauważenia tego w AppDomain.CurrentDomain.UnhandledException. Idealnym rozwiązaniem byłoby znalezienie i naprawienie wszystkich nieobsługiwanych wyjątków, ale na razie cieszę się, że właśnie zarejestrowałem wyjątek, zrestartuj aplikację (a tym samym usługę WCF) zamiast tylko kończenia i zawieszania aplikacji. – Serapth

Odpowiedz

4

Unikaj okna dialogowego WER, zapobiegając wychodzeniu z programu obsługi zdarzeń UnhandledException. Wywołaj metodę Environment.Exit(), aby zakończyć działanie aplikacji.

+1

Dzięki, działa, gdy muszę zakończyć aplikację. Ale co powinienem zrobić, jeśli trzeba go ponownie uruchomić? Używam Application.Restart(), ale pokazuje to okno dialogowe ([Twój program] przestał działać) ... – Laserson

Powiązane problemy