Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Исключения, связанные с поврежденным состоянием (Corrupted State Exceptions)Содержание книги
Поиск на нашем сайте
В .NET Framework 4.0 появилось совершенно новое пространство имён под названием System.Runtime.ExceptionServices (которое поставляется в составе сборки mscorlib.dll). Это довольно небольшое пространство имён включает в себя всего два типа класса, которые могут применяться, когда необходимо снабдить различные методы в приложении (вроде метода Main) возможностью перехвата и обработки «исключений, связанных с поврежденным состоянием» (Corrupted State Exceptions — CSE). Платформа .NET всегда размещается в среде обслуживающей операционной системы (такой как Microsoft Windows). Имея опыт программирования приложений для Windows, можно вспомнить, что низкоуровневый API-интерфейс Windows обладает очень уникальным набором правил по обработке ошибок времени выполнения, которые немного похожи на предлагаемые в.NET приёмы структурированной обработки исключений. В API-интерфейсе Windows можно перехватывать ошибки чрезвычайно низкого уровня, которые как раз и представляют собой ошибки, связанные с «поврежденным состоянием». Попросту говоря, если операционная система Windows передает такую ошибку, это означает, что с программой что-то серьезно не так, причем настолько, что нет никакой надежды на восстановление, и единственно возможной мерой является завершение ее работы. При работе с.NET ошибка CSE может появиться только в случае использования в коде С# служб вызова платформы (для непосредственного взаимодействия с API-интерфейсом Windows) или применения поддерживаемого в С# синтаксиса указателей. До выхода версии.NET 4.0 подобные низкоуровневые ошибки, специфичные для операционной системы, можно было перехватывать только с помощью блока catch, предусматривающего перехват общих исключений System.Exception. Однако с этим подходом была связана проблема: если каким-то образом возникало исключение CSE, которое перехватывалось в таком блоке catch, в.NET не предлагалось (и до сих пор не предлагается) никакого элегантного кода для восстановления. Теперь, с выходом версии.NET 4.0, среда CLR больше не разрешает автоматический перехват исключений CSE в приложениях.NET. В большинстве случаев это именно то поведение, которое нужно. Если же необходимо получать уведомления о таких ошибках уровня ОС (обычно при использовании унаследованного кода, нуждающегося в таких уведомлениях), понадобится применять атрибут [HandledProcessCorruptedStateExceptions]. Важно понять, что данный атрибут может применяться к любому методу в приложении, и в результате его применения соответствующий метод получит возможность иметь дело с подобными низкоуровневыми ошибками, специфическими для операционной системы. Чтобы увидеть хотя бы простой пример, создаём следующий метод Main, не забыв перед этим импортировать в файл кода С# пространство имён System.Runtime.ExceptionServices:
[HandleProcessCorruptedStateExceptions] static int Main() {
try { // Предполагаем, что в методе Маin вызывается метод, // который отвечает за выполнение всей программы RunMyApplication(); } catch (Exception ex) { // Если добрались сюда, значит, что-то произошло. // Поэтому просто отображаем сообщение и выходим из программы Console.WriteLine("Ошибка: ", ex.Message); return -1; } Console.WriteLine("Для продолжения нажмите любую клавишу..."); Console.ReadKey(); return 0; }
Задача приведенного выше метода Main практически сводится только к вызову второго метода, отвечающего за выполнение всего приложения. В данном примере будем полагать, что в этом втором методе RunMyApplication интенсивно используется логика try-catch для обработки любой ожидаемой ошибки. Поскольку метод Main был помечен атрибутом [HandledProcessCorruptedStateExceptions], в случае возникновения ошибки CSE перехват System.Exception получается последним шансом сделать хоть что-то перед завершением работы программы. Метод Main здесь возвращает значение int, а не void. Возврат операционной системе нулевого значения свидетельствует о завершении работы приложения без ошибок, в то время как возврат любого другого значения (обычно отрицательного числа) — о том, что в ходе его выполнения возникла какая-то ошибка.
|
||||
Последнее изменение этой страницы: 2016-12-28; просмотров: 183; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.195.90 (0.007 с.) |