Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ObjectDisposedException, после закрытия формы 
:(
    Опции темы
elbjarn
Дата 9.10.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



Мне досталось сопровождение проекта, который был сделан разными людьми, и в котором от каждого осталось понемножку мусора. В приложении создается куча потоков, взаимодействующих с разными контролами. При заполнении листбокса, к примеру (речь идет о compact framework, листбокс заполняется медленно), если закрыть форму, то возникает ObjectDisposedException, из-за того, что поток, в котором заполнялся листбокс (через делегаты), пытается продолжать свою работу.
Есть какой-нибудь способ отловить все исключения в программе в одном месте и просто не выдавая никаких сообщений спокойно закрыться?

Код

static void Main()
        {
            try
            {
                if (!Config.Instance.OldMainWindow)
                    Application.Run(new Main());
                else Application.Run(new MainFormRegmed());
            }
            catch
            { }
        }


такой вариант не прокатывает, соответственно потому, что исключение возникает не в главном потоке...
PM MAIL ICQ   Вверх
Partizan
Дата 9.10.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Цитата

Есть какой-нибудь способ отловить все исключения в программе в одном месте


в общем случае - нет.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MasterOfCode
Дата 9.10.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(elbjarn @  9.10.2008,  14:33 Найти цитируемый пост)
Есть какой-нибудь способ отловить все исключения в программе в одном месте и просто не выдавая никаких сообщений спокойно закрыться?

А правильно ли это? Рихтер пишет что нет.
Цитата(Дж.Рихтер @  9.10.2008,  15:51, стр. 355)

He всякое исключение следует перехватывать
Распространенная ошибка — слишком частое и неверное использование блоков
catch. Перехватывая исключение, вы тем самым заявляете, что ожидали его, по-
нимаете его причины и знаете, как с ним разобраться. Другими словами, вы опре-
деляете политику для приложения. Но слишком часто приходится видеть код вроде
ЭТОГО:
catch (Exception) {
    ...
}
Этот код объявляет, что предвидел все исключения любого типа и умеет восста-
навливаться после любых исключений в любых ситуациях. Разве это возможно?
Тип из библиотеки классов ни в коем случае не должен перехватывать все исклю-
чения подряд; ведь он не может знать наверняка, как приложение должно отреа-
гировать на исключения. Кроме того, тип будет часто вызывать код приложения
через делегат или виртуальный метод. Если в одной части приложения возникает
исключение, то в другой части, вероятно, есть код, способный перехватить его.
Исключение должно пройти через фильтр перехвата и быть передано вверх по
стеку вызовов, чтобы код приложения смог обработать его как надо. 


Обрабатывайте свой ObjectDisposedException и восстанавливайте работу приложения.



--------------------
user posted image
PM ICQ   Вверх
Partizan
Дата 9.10.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



MasterOfCode, он не знает в каком из потоков оно происходит...соответственно и где обрабатывать - тоже незнает


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
elbjarn
Дата 9.10.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



скажем так - я знаю, в каком это потоке происходит, но проект довольно большой, а сдавать его надо было быстро, поэтому я хотел в одном месте пытаться ловить все исключения.
сделать так не получилось, поэтому в особо критичных местах в главных функциях потоков поставил 
 обработку наиболее важных исключений.
спасибо за помощь и за ценную рекомендацию от Рихтераsmile
PM MAIL ICQ   Вверх
mihryak
Дата 9.10.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



PM MAIL ICQ   Вверх
elbjarn
Дата 10.10.2008, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 13.4.2008
Где: Дубна

Репутация: 1
Всего: 3



mihryak,
это именно то, что было нужно. но, к сожалению, это событие не поддерживается компакт фреймворком:(
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.