Domyślnym zachowaniem w aplikacjach .NET jest wyjście w przypadku wystąpienia nieobsługiwanego wyjątku. Gdy wyjątek nie jest obsługiwany, program znajduje się w nieznanym i prawdopodobnie niestabilnym stanie. To, że wydarzyło się w tle, nie oznacza, że błąd nie wpłynie na resztę programu. Najbardziej rozważnym kursem dla środowiska wykonawczego w tej sytuacji jest zrzucenie programu.
Możesz zajrzeć do AppDomain.CurrentDomain.UnhandledException
, która pozwoli Ci złapać nieobsługiwane wyjątki i odpowiednio zareagować. Lepszym rozwiązaniem jest zawarcie procesu wątku za pomocą try...catch
. Ale tylko on radzi sobie z tymi wyjątkami, które wie, jak sobie z tym poradzić. W ten sposób:
void MyThreadProc()
{
try
{
// ...
}
catch
{
// handle all exceptions
// This is a BAD idea
}
}
jest naprawdę zły pomysł, ponieważ może maskować wyjątki, które naprawdę chcą być propagowane do programu głównego.