Перехват ошибок с помощью структурной обработки ошибок
Эксперимент с ошибками дисковода
- Вставьте в дисковод A (или в ваш первый дисковод) чистую дискету и скопируйте на нее файл Fileopen.bmp. Файл Fileopen.bmp лежит в папке c:\vbnet03sbs\Гл.9\disk drive error. Чтобы скопировать файл, используйте проводник Windows или другой инструмент для копирования файлов.
- Запустите Visual Studio и откройте проект Disk Drive Error, находящийся в папке c:\vbnet03sbs\Гл.9\disk drive error. В среде разработки откроется проект Disk Drive Error.
- Отобразите форму проекта, если вы ее не видите. Проект Disk Drive Error является шаблоном программы, которая отображает в области вывода изображений файл Fileopen.bmp, когда пользователь щелкает на кнопке Проверить диск.
-
Чтобы отобразить процедуру события Button1_Click, дважды щелкните на кнопке Проверить диск формы. Между операторами Private Sub и End Sub вы увидите следующую строку кода программы:
PictureBox1.Image = _ System.Drawing.Bitmap.FromFile ("a:\Fileopen.bmp")
Метод FromFile открывает указанный файл. Здесь он открывает файл Fileopen.bmp, расположенный на диске A, и отображает его в области вывода изображений. Однако если диск вставлен не до конца, или путь к файлу указан неверно, попытка выполнить оператор приведет к возникновению ошибки "File Not Found" (файл не найден). Это и есть та ошибка времени исполнения, которую требуется перехватить.
-
Оставив дискету в дисководе A, щелкните на кнопке Start (Начать) и запустите программу. Появится форма проекта, показанная ниже.
-
Щелкните на кнопке Проверить диск формы. Программа загрузит файл Fileopen.bmp с дискеты и отобразит его в области вывода изображений, как показано здесь.
Свойство SizeMode объекта вывода изображений установлено на значение StretchImage, так что файл заполняет все пространство этого объекта. Теперь посмотрите, что происходит, когда дискета в дисководе отсутствует, а программа пытается загрузить файл.
- Удалите дискету из дисковода.
-
Щелкните на кнопке Проверить диск формы. Программа не может найти файл, и Visual Basic генерирует ошибку времени исполнения - или необработанное исключение, которое приводит к обрушению программы. Откроется следующее диалоговое окно.
- Чтобы закрыть программу, щелкните на кнопке Continue (Продолжить). Программа закроется, и вернется среда разработки.
Написание обработчика ошибок дисковода
Проблема с программой Disk Drive Error не в том, что она игнорирует имеющиеся в Visual Basic возможности по обработке ошибок - мы просто не указали, что Visual Basic должен делать, когда он встречает это исключение. Решение этой проблемы состоит в написании блока кода Try...Catch, который распознает эту ошибку и сообщает Visual Basic, что делать при ее возникновении. Теперь вы добавите в программу этот обработчик ошибок.
Использование Try ... Catch для перехвата ошибок
- Если процедура события Button1_Click в Редакторе кода не отображается, отобразите ее. Добавьте в процедуру события, при выполнении которой может возникнуть проблема, обработчик ошибок. На самом деле вы пишете блок кода Try...Catch вокруг кода, являющегося потенциальным источником проблем, чтобы защитить остальную часть программы от возникающих в нем ошибок времени исполнения.
-
Измените процедуру события так, чтобы существующий оператор FromFile оказался между операторами Try и Catch, как показано в следующем блоке кода:
Try PictureBox1.Image = _ System.Drawing.Bitmap.FromFile ("a:\Fileopen.bmp") Catch MsgBox("Пожалуйста, вставьте дискету в дисковод A!") End Try
Не нужно заново вводить оператор FromFile - просто введите перед ним и после него операторы Try, Catch, MsgBox и End Try. Этот код программы демонстрирует наиболее распространенный способ использования блока кода Try...Catch. Он помещает проблемный оператор FromFile в блок кода Try, и теперь при возникновении ошибки выполняются операторы, находящиеся в блоке кода Catch. Блок кода Catch просто отображает окно сообщения, и просит пользователя вставить требуемый диск в дисковод A, чтобы программа могла продолжать работу. Этот блок кода Try...Catch не содержит оператора Finally, так что обработчик ошибок завершается ключевыми словами End Try.
- Убедитесь, что дискета из дисковода A удалена, а затем щелкните на кнопке Start (Начать), чтобы запустить программу.
-
Щелкните на кнопке Проверить диск. Вместо остановки исполнения программы, Visual Basic вызывает блок кода Catch, который отображает следующее окно сообщения.
- Щелкните на OK, а затем на кнопке Проверить диск. Программа снова отображает это окно сообщения, и просит вставить дискету в дисковод A. Это окно сообщения будет появляться каждый раз при возникновении проблемы с загрузкой файла.
- Вставьте дискету в дисковод A, щелкните на OK, а затем снова щелкните на кнопке Проверить диск. Как и ожидалось, файл появится в области вывода изображений. Обработчик ошибок полностью справился со своей задачей - вместо неумышленного обрушения программы она подсказала, как исправить ошибку, и можно продолжить работу с этим приложением.
- Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
Настало время изучить некоторые варианты обработчика ошибок Try...Catch.