У меня есть небольшое приложение WinForms, которое использует объект BackgroundWorker для выполнения долговременной операции.
Операция фона вызывает случайные исключения, обычно, когда кто-то имеет открытый файл, который воссоздается.
Независимо от того, запускается ли код из среды IDE или нет, появляется диалоговое окно с сообщением об ошибке, информирующее пользователя о том, что произошло исключение Unhandled. Компиляция кода с использованием конфигурации Release также не изменяет это.
Согласно MSDN:
Если операция вызывает исключение, которое ваш код не обрабатывает, BackgroundWorker ловит исключение и передает его в обработчик события RunWorkerCompleted, где он отображается как свойство Error для System.ComponentModel..::. RunWorkerCompletedEventArgs. Если вы работаете под отладчиком Visual Studio, отладчик будет разбиваться в точке обработчика событий DoWork, где было обработано необработанное исключение.
Я ожидаю, что эти исключения будут исключены и захотят обработать их в событии RunWorkerCompleted, а не в DoWork. Мой код работает правильно, и ошибка обрабатывается правильно в событии RunWorkerCompleted, но я не могу на всю жизнь понять, как остановить диалог ошибок .NET, жалующийся на возникновение "необработанного исключения".
Разве BackgroundWorker не должен ломать эту ошибку автоматически? Не то, что говорится в документации MSDN? Что мне нужно сделать, чтобы сообщить .NET, что эта ошибка обрабатывается, но все же позволяет исключению просачиваться в свойство Error RunWorkerCompletedEventArgs?