У меня есть небольшое приложение WinForms, которое использует объект BackgroundWorker для выполнения долговременной операции.Необработанные исключения в BackgroundWorker
Фоновая операция вызывает случайные исключения, обычно, когда у кого-то есть открытый файл, который воссоздается.
Независимо от того, выполняется ли код из среды IDE или нет, появляется диалоговое окно с сообщением об ошибке, информирующее пользователя о том, что произошло необработанное исключение. Компиляция кода с использованием конфигурации Release также не изменит этого.
По MSDN:
Если операция вызывает исключение, что ваш код не обрабатывает, то BackgroundWorker перехватывает исключение и передает его в обработчик события RunWorkerCompleted, где он подвергается воздействию как свойство от ошибок System.ComponentModel .. ::. RunWorkerCompletedEventArgs. Если вы работаете под отладчиком Visual Studio, отладчик будет разбиваться на точку в обработчике событий DoWork, где было обработано необработанное исключение.
Я ожидаю, что эти исключения будут выбрасываться по случаю и будут обрабатывать их в событии RunWorkerCompleted, а не в DoWork. Мой код работает правильно, и ошибка обрабатывается правильно в событии RunWorkerCompleted, но я не могу на всю жизнь понять, как остановить диалог ошибок .NET, жалующийся на появление «необработанного исключения».
Разве фоновая работа не должна ломать эту ошибку автоматически? Не то, что говорится в документации MSDN? Что мне нужно сделать, чтобы сообщить .NET, что эта ошибка - это, которая обрабатывается, но все же позволяет исключению просачиваться в свойство Error RunWorkerCompletedEventArgs?
+1 Хорошая точка. В моем примере указана специфика обработки ошибки, но мой код действительно вызовет другое исключение, если исключение никогда не попадало в методе DoWork. –
Я прошу различить .... Я также изо всех сил пытаюсь понять, как класс BGW ест вверх, потому что иногда мое приложение предоставляет мне доступ к моей пользовательской области на Win7, а иногда и нет. Когда я исследую далее, я обнаружил, что отказ в доступе обусловлен тем, что папка не существует. Я считаю, что иногда ошибка возникает в моем приложении, а иногда и нет. – IbrarMumtaz
@Ibrar, вы всегда проверяете e.Error внутри обработчика события RunWorkerCompleted? Убедитесь, что вы проверили это, прежде чем что-либо сделать. Об этом можно узнать обо всех доступных исключениях. –