Поведение по умолчанию в приложениях .NET - выход при возникновении необработанного исключения. Когда исключение остается необработанным, программа находится в неизвестном и, возможно, неустойчивом состоянии. То, что это произошло в фоновом потоке, не означает, что ошибка не повлияет на остальную часть программы. Самый разумный путь для среды выполнения в этой ситуации - выгрузить программу.
Вы можете заглянуть в AppDomain.CurrentDomain.UnhandledException
, что позволит вам отлавливать необработанные исключения и реагировать соответствующим образом. Лучшее решение - обернуть ваш поток процедур с try...catch
. Но он должен обрабатывать только те исключения, которые он умеет обрабатывать. Делаем это:
void MyThreadProc()
{
try
{
// ...
}
catch
{
// handle all exceptions
// This is a BAD idea
}
}
Это действительно плохая идея, потому что она может маскировать исключения, которые вы действительно хотите распространить в основную программу.