Jest to związane z previous question.Dlaczego wyjątki AppDomain niezmiennie kończą aplikację?
Próbuję teraz zrozumieć, w jaki sposób wyjątki wątków interfejsu użytkownika mogą być powstrzymane przed zakończeniem aplikacji, podczas gdy wyjątki inne niż interfejs użytkownika nie mogą być.
Aby uzyskać więcej informacji, zobacz this example.
Najważniejsze, co chciałbym w tym przypadku zrobić, to "cicho" zakończyć proces - bez wyświetlania okna dialogowego Windows, które pyta, czy chcę wysłać raport o błędzie, czy nie.
To mój AppDomain UnhandledExceptionHandler:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
UPDATE
W świetle uwag w this answer, chciałbym wyjaśnić, że najważniejsze Chciałbym dowiedzieć się więcej na temat mechanizmu, który umożliwia wątkowi UI wczesną możliwość przechwycenia nieobsługiwanych wyjątków za pośrednictwem mechanizmu Application.ThreadException
. I czy takie zachowanie może zostać zaimplementowane w wątku innym niż UI.
@Reed: „Nieobsługiwany wyjątki w wątku UI spowoduje takie same coś się wydarzy. " - to nie jest prawda. Utwórz aplikację testową i wypróbuj ją sam. –
Technicznie powinienem był powiedzieć "Nieobsługiwane wyjątki w głównym wątku". Windows Forms dodaje własne zachowanie wyjątku w wątku UI (ponieważ działa całkowicie w wątku UI), który zmienia zachowanie głównego wątku. Stwórz aplikację konsolową i spróbuj tego, a zobaczysz, że nie ma znaczenia, co robią wątki - wszystko to zniszczy aplikację. –
Następnie powinienem powtórzyć moje pytanie: W jaki sposób wątek interfejsu użytkownika wykonuje jego ogólne zachowanie podczas obsługi wyjątków? Czy jest to coś, co mogę replikować jako zachowanie dla wątku innego niż UI? –