Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Исключительные ситуации и реакция на них в среде .NET. Особенности исключительной ситуации класса ThreadAbortException.

Читайте также:
  1. C)Мак-Калум реакциясы
  2. I. ФИЗИОЛОГИЧЕСКИЕ ОСОБЕННОСТИ
  3. II. ОСОБЕННОСТИ РАЗВИТИЯ ПСИХИЧЕСКИ ПРОЦЕССОВ
  4. IV. Особенности привлечения сил и средств пожарной охраны, гарнизонов пожарной охраны для тушения пожаров и проведения аварийно-спасательных работ
  5. V2:Профилактика девиантного поведения в молодежной среде. Социально-педагогическая работа с неформальными молодежными группами и объединениями
  6. Windows. Особенности ОС Windows.
  7. А) разработку процедур диагностики и прогнозирования кадровой ситуации;
  8. Адаптация стилей руководства к ситуации
  9. Административно-правовые нормы, их характерные особенности. Материальные и процессуальные нормы.
  10. Административно-правовые отношения понятие, особенности и виды.

private void SomeMethod() {

try {

// Внутрь блока try помещают код, требующий корректного

// восстановления работоспособности или очистки ресурсов.

}

catch (InvalidOperationException) {

// В такие блоки catch помещают код, который должен восстанавливаться

// после исключений типа InvalidOperationException (или любого исключения,

// производного от него).

}

catch (IOException) {

// В такие блоки catch помещают код, который должен восстанавливаться // после исключений типа IOException (или любого исключения, // производного от него).

catch {

// В такие блоки catch помещают код, который должен

// восстанавливаться после исключений любого типа.

// После перехвата исключений их, как правило,

// генерируют повторно.

throw;

}

finally {

// Внутрь блоков finally помещают код, выполняющий очистку ресурсов после любых действий, начатых в блоке try. Код из этого блока исполняется ВСЕГДА независимо от того, было исключение или нет.

}

// Код после блока finally исполняется, если в блоке try не было исключения или если исключение было перехвачено блоком catch и не было сгенерировано то же самое или другое исключение.)

«Допустим, у меня есть приложение, которое должно считать из файла структуру размером в 20 байт, но файл оказался лишь 10-байтовым. В этом случае я не ожидаю встретить конец файла при чтении, но это неожидан­но происходит. Наверное, здесь должно возникнуть исключение, не так ли?» Фак­тически большинство файлов содержит структурированные данные. Довольно ред­ко бывает так, что приложение читает из файла байт за байтом, тут же обрабаты­вая прочитанные байты, пока не достигнет конца файла. Поэтому я думаю, логичнее будет, если при попытке чтения за пределами файла метод Read всегда будет ге­нерировать исключение.

При разработ­ке типа вы сначала пытаетесь представить себе разнообразные ситуации, в кото­рых будет применяться тип. Сначала определяется имя типа — обычно существи­тельное, например FileStream (файловый поток) или StringBuilder (построитель строк), затем приступают к определению членов (типов данных свойств, парамет­ров методов, возвращаемых значений и т. п.). Особенности определения этих членов становятся программным интерфейсом типа. Эти члены действия обыч­но обозначаются глаголами — Read (считать), Write (записать), Flush (очистить), Append (присоединить), Insert (вставить), Remove (удалить) и т. п. Если член, обо­значающий действие, не может выполнить свою задачу, он должен сгенерировать исключение.

Есть масса причин, по которым вызванный метод может сгенерировать исключение:

■ если недостаточно памяти в стеке, генерируется исключение Stack-Overflowlixception\

■если не удается обнаружить сборку, в которой определен тип, генери­руется исключение PileNotFoundException-,

■если IL-код метода не поддается верификации, генерируется исключе­ние VetificationException;

■если недостаточно памяти для JIT-компиляции IL-кода, генерируется исключение OutOJMemoryException.

 

Фильтрация исключений среды выполнения

Перехватываемые и обрабатываемые исключения можно отфильтровать либо по типу, либо по некоторым критериям, определяемым пользователем.

Обработчики с фильтрацией по типу управляют определенным типом исключения (или производные из этого типа классы).В следующем примере показан обработчик с фильтрацией по типу, позволяющий перехватить определенное исключение, в данном случае исключение FileNotFoundException.

catch(FileNotFoundException e)

{

Console.WriteLine("[Data File Missing] {0}", e);

}

Обработчики с пользовательской фильтрацией перехватывают и обрабатывают исключения на основе требований к исключению, определяемых пользователем.

ThreadAbortException - Исключение, выдаваемое при вызове метода Abort. Этот класс не может наследоваться.

При вызове метода Abort для уничтожения потока, общеязыковая среда выполнения выдает исключение ThreadAbortException. Исключение ThreadAbortException является особым исключением, которое может быть перехвачено, но снова возникает в конце блока catch. При возникновении этого исключения среда выполнения перед тем, как завершить поток, выполняет все блоки finally. Так как поток может выполнять код в блоках finally неограниченное время или вызывать метод Thread.ResetAbort для отмены аварийного завершения потока, нет гарантии, что поток когда-либо закончит работу. Чтобы дождаться окончания работы прерванного потока можно вызвать метод Thread.Join. Вызов метода Join является блокирующим, возврата не происходит до действительного окончания выполнения потока.

Когда среда CLR останавливает фоновые потоки после того, как все потоки переднего плана в управляемом исполняемом файле завершились, метод Thread.Abort не используется. Следовательно, нельзя использовать перехват исключения ThreadAbortException для обнаружения прерывания фоновых потоков средой CLR.

 

 




Дата добавления: 2015-01-30; просмотров: 39 | Поможем написать вашу работу | Нарушение авторских прав

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | <== 15 ==> | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав