Чтобы перехватить необработанные исключения в потоках пользовательского интерфейса только , вы можете использовать Application.ThreadException
событие.
Чтобы перехватить необработанные исключения во всех потоках в домене приложения, используйте AppDomain.Current.UnhandledException
. Последнее не позволит вам проглотить исключение - вы можете зарегистрировать его в обработчике, но как только оно вернется, исключение будет передано Уотсону, который отобразит обычный диалог сбоя Win32.