Неа. У вас есть возможность регистрировать любые необработанные исключения через событие AppDomain.CurrentDomain.UnhandledException. Однако это не приведет к исключению и позволит продолжить.
Честно говоря, ваше желание "держать приложение открытым без сбоев" является понятной, но все же наивной целью. Я видел много программного обеспечения, которое пытается сделать это, и большая часть этого - полная чушь. Если что-то в вашем приложении пошло не так и у вас не было явного улова, то вы не знаете , что пошло не так, и продолжение в лучшем случае опасно.
Вместо этого вы должны попытаться понять, где в вашей программе могут возникать исключения, и написать соответствующие обработчики для этих подпрограмм на более позднем этапе . Вы можете регистрировать исключения, как вы уже заметили, и получать эти отчеты с поля. Затем вы можете написать соответствующие обработчики для обработки этих ошибок.
В моем последнем проекте мы реализовали «ловушку» (для потока пользовательского интерфейса), но это просто остановит приложение, сообщит пользователю о проблеме и закроет приложение (другой сервис затем перезапустит его). На самом деле это было довольно легко, поскольку мы перенаправили все нажатия клавиш и щелчки через одну точку (для упрощения настройки клавиш и экранов). Это может быть сложнее, если вы просто используете стандартные формы.
Также убедитесь, что вы также записываете высокоуровневые уловки в фоновые потоки, поскольку необработанное исключение в фоновом потоке мгновенно завершит работу вашего приложения. В этом случае мы обычно направляли поток обратно в обработчик пользовательского интерфейса «catch-all» (через интерфейс), который (снова) отображал сообщение, регистрировал исключение и закрывал приложение.