10.1.2.1. Использование оператора Try

Источник здесь. [перевод не проверен][Переводчик: Богданов Михаил][Андрей Бушман: добавил код примеров и перевёл комментарии]

    В VB.NET и C#, ошибки времени выполнения могут быть перехвачены с помощью оператора Try. Этот оператор устанавливает ловушку для системы. При возникновении ошибки после оператора Try, обработчик ошибок по умолчанию не используется, а выполнение программы продолжается с оператора Catch.

    Есть три вида оператора Try:
  • Try-Catch
  • Try-Finally
  • Try-Catch-Finally

Операторы Try-Catch

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

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

    Для информации об объекте исключения, смотри использование объектов исключения.

Операторы Try-Finally

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

    Операторы Try- Finally лучше всего использовать при разработке и отладке приложения.

Операторы Try-Catch-Finally

    Операторы Try- Catch -Finally – комбинация операторов Try-Catch и Try- Finally. Эти операторы перехватывают ошибку и вместо отображения встроенного сообщения и завершения приложения, передают управления оператору Catch. После того, как код после оператора Catch будет выполнен программа продолжает выполнятся с оператора Finally, который дает приложению один шанс на продолжение работы, либо аккуратное завершение работы приложения.

Тест обработки ошибок с Try-Catch-Finally и без них

    Следующие примеры пытаются открыть файл Drawing123 на диске C. Если файл не найден, то возникает ошибка eFileNotFound. Первая команда не обрабатывает ошибку вызванную методом ReadDwgFile , так что при запуске команды в AutoCAD вызывается сообщение об ошибке. Вторая команда ловит ошибку используя операторы Try-Catch-Finally

Код на VB.NET

   1:  Imports Autodesk.AutoCAD.Runtime
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices
   4:   
   5:  <CommandMethod("NoErrorHandler")> _
   6:  Public Sub NoErrorHandler()
   7:    '' Создание новой базы данных без окна документа
   8:    Using acDb As Database = New Database(False, True)
   9:        '' Читаем файл "Drawing123.dwg" с диска C:\
  10:        '' Если файл "Drawing123.dwg" не будет найден, мы получим исключение
  11:        '' eFileNotFound, после чего выполнение программы будет прервано.
  12:        acDb.ReadDwgFile("c:\Drawing123.dwg", _
  13:                         System.IO.FileShare.None, False, "")
  14:    End Using
  15:   
  16:    '' Следующее ниже сообщение в случае получения исключения не будет отображаться, потому что
  17:    '' исключение, возникшее при вызове метода ReadDwgFile не было соответствующим образом обработано1.
  18:    Application.ShowAlertDialog("End of command reached")
  19:  End Sub
  20:   
  21:  <CommandMethod("ErrorTryCatchFinally")> _
  22:  Public Sub ErrorTryCatchFinally()
  23:    '' Создание новой базы данных без окна документа
  24:    Using acDb As Database = New Database(False, True)
  25:        Try
  26:            '' Читаем файл "Drawing123.dwg" с диска C:\
  27:            '' Если файл "Drawing123.dwg" не будет найден, мы получим исключение
  28:            '' eFileNotFound, которое затем будет обработано оператором catch.
  29:            acDb.ReadDwgFile("c:\Drawing123.dwg", _
  30:                             System.IO.FileShare.None, False, "")
  31:        Catch Ex As Autodesk.AutoCAD.Runtime.Exception
  32:            Application.ShowAlertDialog("The following exception was caught:" & _
  33:                                        vbLf & Ex.Message)
  34:        Finally
  35:            '' Следующее ниже сообщение будет отображаться, поскольку исключение,
  36:            '' возникшее при вызове метода ReadDwgFile было обработано1.
  37:            Application.ShowAlertDialog("End of command reached")
  38:        End Try
  39:    End Using
  40:  End Sub

Код на C#

   1:  using Autodesk.AutoCAD.Runtime;
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices;
   4:   
   5:  [CommandMethod("NoErrorHandler")]
   6:  public void NoErrorHandler()
   7:  {
   8:    // Создание новой базы данных без окна документа
   9:    using (Database acDb = new Database(false, true))
  10:    {
  11:        // Читаем файл "Drawing123.dwg" с диска C:\
  12:        // Если файл "Drawing123.dwg" не будет найден, мы получим исключение
  13:        // eFileNotFound, после чего выполнение программы будет прервано.
  14:        acDb.ReadDwgFile("c:\\Drawing123.dwg", 
  15:                         System.IO.FileShare.None, false, "");
  16:    }
  17:   
  18:    // Следующее ниже сообщение в случае получения исключения не будет отображаться, потому что
  19:    // исключение, возникшее при вызове метода ReadDwgFile не было соответствующим образом обработано1.
  20:    Application.ShowAlertDialog("End of command reached");
  21:  }
  22:   
  23:  [CommandMethod("ErrorTryCatchFinally")]
  24:  public void ErrorTryCatchFinally()
  25:  {
  26:    // Создание новой базы данных без окна документа
  27:    using (Database acDb = new Database(false, true))
  28:    {
  29:        try
  30:        {
  31:            // Читаем файл "Drawing123.dwg" с диска C:\
  32:            // Если файл "Drawing123.dwg" не будет найден, мы получим исключение
  33:            // eFileNotFound, которое затем будет обработано оператором catch.
  34:            acDb.ReadDwgFile("c:\\Drawing123.dwg",
  35:                             System.IO.FileShare.None, false, "");
  36:        }
  37:        catch (Autodesk.AutoCAD.Runtime.Exception Ex)
  38:        {
  39:            Application.ShowAlertDialog("The following exception was caught:\n" +
  40:                                        Ex.Message);
  41:        }
  42:        finally
  43:        {
  44:            // Следующее ниже сообщение будет отображаться, поскольку исключение,
  45:            // возникшее при вызове метода ReadDwgFile было обработано1.
  46:            Application.ShowAlertDialog("End of command reached");
  47:        }
  48:    }
  49:  }

Примечания Андрея Бушмана:
1 - имеется в виду обработка оператором catch

Comments