|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
|
Как реализовать глобальную обработку ошибок/исключений?22.01.2018, 14:34. Показов 7648. Ответов 15
Метки нет (Все метки)
Здравствуйте. На php есть возможность глобально отлавливать все исключения и ошибки, вплоть до фатальных.
Есть ли возможность реализовать такое новичку на с#? Зачем это мне нужно: 1. Для того чтоб не писать в каждом методе конструкцию try-catch, а то и вовсе try-catch-catch-finaly. Либо if-else. Из-за чего в итоге проверок выходит больше, чем полезного кода. 2. Для того, чтоб иметь возможность намеренно подавлять вывод сообщений об исключениях в одном месте. Без проверок в каждом catch. И не сообщать пользователю о них поверх всех приложений, з громким оповещением как это, обычно ,делает виндовс. Ну и после этого, например, записать тихо в лог, или вывести в трей. Или вообще ничего не делать и попытаться продолжить выполнение. В зависимости от выбора пользователя. На всех сайтах и книгах вижу только перехват в пределах одного метода, и ни одного примера о глобальном перехвате. В коде где много функций для работы с файлами, обработкой пользовательского ввода и получения данных от окон и процессов, это очень нужно. Тк код, из-за проверок всего этого на ошибки, превращается в нечто-из-глубин. Как вообще быть в таком случае.
0
|
|
| 22.01.2018, 14:34 | |
|
Ответы с готовыми решениями:
15
Как реализовать глобальную переменную? MVVM приложение. Как правильно реализовать - обработка исключений, DependencyObject, или ещё как-то?
|
|
|
|
| 22.01.2018, 14:38 | |
|
1
|
|
|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
||||||||||
| 22.01.2018, 16:08 [ТС] | ||||||||||
|
insite2012,
Добавлено через 1 час 11 минут insite2012, И наверное не совсем точно выразил мысль в теме по поводу того что мне нужно. Не могли бы вы подсказать, как реализовать ловлю ошибок в собственном пространстве имен? Как я понял Application.ThreadException должен быть каждый реализован в основном классе программы. Но мне хотелось бы реализовать это в собственной dll и чтоб ошибки обрабатывались только те, что генерируются в самом пространстве имен. Но на саму форму и на другие пространства это не должно влиять. Что на подобии обертки для классов, которые находятся внутри, созданного мной пространства. Типа
0
|
||||||||||
|
|
|||||||
| 22.01.2018, 16:38 | |||||||
![]()
0
|
|||||||
|
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
|
|
| 22.01.2018, 22:04 | |
|
Практически ничего нету, потому что это очень странное решение. Как можно обработать все исключения в одном месте. С тем что каждое исключение привязано к конкретному коду? И как программа может работать дальше если у нее где то возникло исключение, если его не обработать в нужном месте и не восстановить состояние, то скорее всего ваше приложение уже будет сломано, и при каждом следующем действии пользователя у вас будут сыпаться ошибки.
А для тех мест где обработка не особо нужна, например UI: в каждом окне если возникла ошибка, просто достаточно заново забрать состояние модели и все. То для такого решения нужно хорошо продумать архитектуру приложения. Собственно по всему этому глобальная обработка никому не нужна, и есть только события позволяющие залогировать ошибку или сохранить состояние (например в отдельный сейв) и завершить работу. В большинстве книг собственно и написано, что все программисты давно уже поняли: для пользователя дешевле сказать об ошибке и экстренно перезапустить приложение, чем работать со сломанным состоянием и возможно поломать всю работу пользователя. Ну и естественно в последнем абзаце речь идет о качественном приложении, в котором ошибки это редкость, а не постоянство.
1
|
|
|
|
|
| 22.01.2018, 22:24 | |
|
Anklav, совсем чуток забыли о логировании состояния и данных откуда и что. Или это не важно?
![]() Оу, а закрыть файлы для записи если упали при той самой записи? А разорвать соединения с базами чтоб открытые не висели? Ну да..."среда позаботится"
1
|
|
|
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 23.01.2018, 14:07 | |
|
skilllab, вообще-то, ОС сама умеет подчищать за свалившимся приложением начиная с Windows 98. Т.е. за долго до появления .NET. Т.е. и дескрипторы открытых файлов высвободятся и TCP-соединения закроются и память занятая освободится.
Вы бы сами, что ли, проверили, ведь это не сложно.
0
|
|
|
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
|
||
| 23.01.2018, 14:29 | ||
|
1) Приложение приступает к выполнению блока кода, прерывание которого возможным процессом сборки мусора является недопустимым. 2)Приложение только что закончило размещать чрезвычайно большое количество объектов и нуждается в как можно скорейшем освобождении большого объема памяти. В том числе IP соединения они никак на программном уровне не контролируются, если мы рассматриваем как рабочий процесс приложения. А вот при закрытии данного процесса убиваются все взаимосвязанные процессы - это уже вступает вход Windows ОС
0
|
||
|
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 23.01.2018, 14:46 | |
|
Кузнец кода, Grabber Collector?)))))) Если речь про сборщик мусора, то он тут вообще ни причём. Я имел в виду саму ОС, которая знает какие ресурсы использовал процесс, потому не испытывает сложностей с тем, чтобы высвободить их корректным образом в случае аварийного завершения процесса.
0
|
|
|
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
|
|||||||
| 23.01.2018, 15:04 | |||||||
2
|
|||||||
|
|
||
| 23.01.2018, 15:21 | ||
|
Есть такое понятие как сквозное(аспектно-ориентированное) программирование. В ASP.NET MVC это доступно "из коробки" в виде фильтров. Для WinForms есть готовые решения, например PostSharp. Если совсем глобально, то как предлагали выше.
1
|
||
|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
|
| 23.01.2018, 16:37 [ТС] | |
|
Спасибо всем ответившим. Можно считать тему закрытой. Сделал некоторое подобие роутера для сообщений от программы. От проверок избавится не удалось. Но хотя бы основные методы чище стали. При обнаружении ошибки одной строкой передаю в роутер сообщение и код сообщения. Ну, а там уже дальше разбор идет выводить не выводить, модальным окном или в трей, логировать или нет.
0
|
|
|
|
|||
| 23.01.2018, 16:42 | |||
|
Добавлено через 3 минуты Добавлю
0
|
|||
|
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
|
|
| 23.01.2018, 20:03 | |
|
skilllab, я писал о глобальной обработке исключений, а не о конкретных. Если вы в глобальном месте очищаете ресурсы приложения, то это совершнно плохой подход. Архитектуру приложения проектируют таким образом, чтобы после его закрытия каждый класс сам позпботился о своих ресурсах, что не имеет никакого отношения к глобольной обработке ошибок. Логгирование ошибок кстати тоже не является обработкой. В моем понимании обработка это восстановление состояния приложения после ошибки.
Да, и я как бы не просто так обработку выделил жирным.
0
|
|
| 23.01.2018, 20:17 | |
|
Не по теме: skilllab, я говорю за ОС, а не за все программы. То, что программа висеть осталась никак не коррелирует с высказыванием о том, что если не закрыть за собой дескрипторы, то "всё пропало". Убъёте свой процесс - ресурсы высвободятся.
0
|
|
| 23.01.2018, 20:17 | |
|
Помогаю со студенческими работами здесь
16
Как правильно производить обработку исключений? Добавить обработку исключений Нужно сделать обработку исключений
Написать обработку исключений, связанных с неправильным вводом данных для калькулятора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|