Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3927 / 218 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 10:

Перехват ошибок с помощью структурной обработки ошибок

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Использование переменной для отслеживания ошибок времени исполнения
  1. В Редакторе кода прокрутите код программы для формы на самый верх, и прямо под тэгом "Windows Form Designer generated code" ("Код, автоматически созданный конструктором форм Windows") введите следующее объявление переменной:

    Dim Retries As Short = 0

    Retries объявлена как целочисленная переменная типа Short, так как она не может содержать очень большие числа. Ей присваивается начальное значение 0, так что она корректно сбрасывается при каждом запуске программы.

  2. В процедуре события Button1_Click отредактируйте обработчик ошибок Try...Catch так, чтобы он выглядел следующим образом:

    Try
      PictureBox1.Image = _
        System.Drawing.Bitmap.FromFile ("a:\Fileopen.bmp")
    Catch
      Retries += 1
      If Retries <= 2 Then
        MsgBox("Пожалуйста, вставьте диск в дисковод A!")
      Else
        MsgBox("Загрузка файла невозможна")
        Button1.Enabled = False
      End If
    End Try

    Блок Try проверяет ту же самую процедуру открытия файла, но на этот раз, если происходит ошибка, блок Catch увеличивает переменную Retries и проверяет ее, чтобы убедиться, что ее значение меньше или равно 2. Чтобы разрешить большее число попыток, число 2 можно изменить - в настоящий момент оно позволяет произойти только двум ошибкам. После того, как произошло две ошибки, выполняется блок Else, и появляется окно сообщения, указывающее, что функция загрузки файла была отключена. Кнопка Проверить диск становится неактивной - рисуется серым цветом и становится недоступной.

  3. Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Disk Drive Handler лежит в папке c:\vbnet03sbs\Гл.9\disk drive handler.
  4. Удалите дискету из дисковода A.
  5. Щелкните на кнопке Проверить диск. Обработчик ошибок отображает в окне сообщения показанное ниже сообщение об ошибке "Пожалуйста, вставьте диск в дисковод A!". За сценой переменная Retries увеличивается и становится равной 1.


  6. Щелкните на OK, а затем на кнопке Проверить диск. Переменная Retries устанавливается на значение 2, и снова появляется сообщение "Пожалуйста, вставьте диск в дисковод A!".
  7. Щелкните на OK, а затем в третий раз на кнопке Проверить диск. Переменная Retries увеличивается до значения 3, и исполняется блок Else. Появляется показанное здесь сообщение "Загрузка файла невозможна".


  8. Щелкните в окне сообщения на OK. Кнопка Проверить диск формы отключается, как показано ниже.


    Обработчик ошибок отследил ошибку при работе с дисководом, позволил пользователю сделать несколько попыток для ее исправления, а затем отключил проблемную кнопку. Это отключающее действие предотвратит будущие ошибки времени исполнения, хотя программа может больше не работать так, как было первоначально задумано.

  9. Чтобы остановить программу, щелкните на кнопке Закрыть.

Использование вложенных блоков Try ... Catch

В обработчиках ошибок также можно использовать вложенный блок кода Try...Catch. Например, если первая попытка прочитать данные с дисковода оказалась неудачной и сгенерировала ошибку времени исполнения, следующий обработчик ошибок использует для единственной повторной попытки выполнения операции второй блок Try...Catch,:

Try
  PictureBox1.Image = _
    System.Drawing.Bitmap.FromFile ("a:\Fileopen.bmp")
Catch
  MsgBox("Вставьте дискету в дисковод A, и нажмите OK!")
  Try
    PictureBox1.Image = _
    System.Drawing.Bitmap.FromFile ("a:\Fileopen.bmp")
  Catch
    MsgBox("Загрузка файла невозможна")
    Button1.Enabled = False
  End Try
End Try

Если пользователь после появления сообщения с запросом вставит дискету в дисковод, второй блок Try откроет файл без ошибки. Однако если связанная с файлом ошибка времени исполнения появится снова, второй блок Catch выведет сообщение о том, что загрузка файла теперь невозможна, и отключит кнопку.

В основном, вложенные обработчики ошибок Try...Catch хорошо работают, когда не требуется совершать много повторных попыток. Если требуется выполнить проблемное действие много раз, используйте переменную для подсчета попыток, или разработайте функцию, которая будет содержать обработчик ошибок и которая может быть вызвана из процедур событий много раз. (За дополнительной информацией о создании функций обратитесь к следующей лекции.)

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов