2011-11-13 10 views
8

Moja aplikacja jest wbudowana w WPF, ale zawiera niektóre komponenty WinForm, które napisaliśmy. Gdy wyjątek jest nieobsługiwany w jednym z komponentów WinForms, powoduje awarię aplikacji.Obsługa nieobsługiwanych wyjątków komponentów WinForm w WPF

Zaimplementowałem DispatcherUnhandledException dla zdarzeń WPF. Jest to dobre, ponieważ pozwala mi wyświetlić błąd i oznaczyć wyjątek jako obsługiwany, aby uniknąć awarii.

Czy mogę zrobić coś podobnego z wyjątkami niezwiązanymi z WPF. Miałem nadzieję na standardowe okno dialogowe WinForm, które pojawiało się i pozwalało użytkownikowi na kontynuowanie lub całkiem aplikacji?

Edit: WinForms wyjątki daj się złapać w DispatcherUnhandledException ale ustawienie e.Handled true nie zatrzymać aplikację z upaść.

+1

Czy możesz pokazać kod, w jaki sposób wyświetlasz/używasz formularzy formularzy systemu Windows? –

+0

'DispatcherUnhandledException' powinien wychwycić wszelkie nieobsługiwane wyjątki w wątku interfejsu użytkownika. Czy twoje komponenty WinForms używają innych wątków? Czy też przez pomyłkę uzyskujesz dostęp do nich z innych wątków? – svick

+0

@DavidePiras Są one hostowane w formantu WindowsFormsHost w znacznikach WPF. Na przykład. windowsFormsHost.Child = [przykład kontrolki WinForms] –

Odpowiedz

8
+0

Nie, nie próbowałem tych. Przyjrzy się. –

+0

Wielkie dzięki! Tryb SetUnhandledExceptionMode rozwiązał problem. –

+0

Jak dokładnie je użyłeś? Próbowałem już przy uruchamianiu aplikacji WPF, aby ustawić obsługę wyjątku ThreadException, a następnie I SetUnhandledExceptionMode na CatchException, ale program obsługi nigdy nie zostanie wywołany. –