![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
есть класс, который в любом методе может кинуть исключение.
Хотелось бы не засорять код try/catch, а передать в него метод, который бы вызывался при исключении. Как правило в этом методе необходимо остановить все потоки и сделать просто невидимыми кнопки. Еще бы хотелось в этот метод передать само исключение, чтоб можно было бы вывести сообщение об ошибке. Как это правильно сделать ? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Есть событие AppDomain.CurrentDomain.UnhandledException, генерится при необработанном исключении в рамках всего приложения.
-------------------- ![]() |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
||||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Этот метод и есть обработчик события AppDomain.CurrentDomain.UnhandledException. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
брр.... ничего не понял
|
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
мне нет необходимости ловить все исключения глобально. Нужно лишь ловить исключения от одного класса
Добавлено @ 16:42 кстати зачем вообще этот обработчик, если код
должен позволять это делать. Но как показала практика он этого не делает |
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: нет Всего: 31 |
zss, а с чего вдруг он будет ловить все исключения? он и ловит сам Application.Run.
а AppDomain.CurrentDomain.UnhandledException самый лучший способ .. |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
но ведь если исключение возникнет, то оно будет в первичном потоке приложения (или в порожденных потоках) А вообще может быть я не совсем туда копаю Я ловлю SocketException. Я хочу в методах при любой ошибке возвращать статус завершения, а лишь только если сокет закрылся или обрыв - тогда дергать метод в котором отработает нужный код. Еще правда не совсем понятно как отделить эти типы исключений друг от друга Добавлено @ 17:14 Еще не соасем понят как поступить с оэтим объектом, если из блока catch будет вызван метод, а в самом методе нужно прибить этот объект. Что можно здесь придумать ? |
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: нет Всего: 31 |
а вообще помоему непрально использовать общее исключение для всего. когда писал либу для использования MySQL, приходилось изголяться капитально:
А отсутствие Мускуль сервера - MySqlException не обрабатывает Это сообщение отредактировал(а) awers - 20.1.2007, 17:36 |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
но обработка всех типов исключений для каждого вызова метода это мне кажется еще большим извращением З.Ы. Что за идиот придумал бросать исключения в методах класса... |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А где их еще бросать? По делу: Словить кинутое исключение может только сам метод либо метод, который находиться выше него в цепочке вызовов. Поэтому все точки входа в твой класс придеться оборачивать в try/catch. И ничего с этим не поделаешь Либо, как уже говорили, можно ловить событие AppDomain.CurrentDomain.UnhandledException. Но тогда это придеться настраивать во всех приложениях, которые будут работать с твоим классом (ИМХО), что не есть гуд |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
ivashkanet, а что если ловить исключения внутри класса и при критичных вываливать свое или например вызывать событие ?
|
|||
|
||||
| ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Легко:
Но это все равно не избавит тебя от Try/Catch, т.е не поможет решить проблемму:
Добавлено @ 11:02 Которая, ИМХО, совсем не проблемма, а следствие ленности |
||||||
|
|||||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
да нет - я не неленив код обрабатывающий исключения и для пользователя класса будет меньше писать. Нужно лишь только обратотать сопытие при критической ситуации |
|||
|
||||
| zss |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: нет Всего: 2 |
в общем примерно сделал
но появились проблеммы у меня есть класс в котором я обрабатываю исключения и вызываю событие если нужно. Пусть это класс A; у него например есть методы write и read, которые могут дернуть событие. Также есть класс B, который содержит А. Я создаю внутри В класс А и подписываюсь на сообщение.
теперь у меня в В есть поток, который вызывает методы класса А.
Если в потоке произойдет исключение в методе write или read, то будет вызвано событие OnMethod в котором я пытаюсь остановить поток. Вопрос: дождусь ли я его ? Добавлено @ 21:28 И если нет, то можно ли событие вызвать ассинхронно ? |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |