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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с обработчиком исключений, Как правельно сделать 
:(
    Опции темы
Empirik
Дата 22.11.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть у меня во такой вот код
Код

public class ErrorHandler
    {
        private ArrayList handlers;
        private static ErrorHandler self;
        private ExceptionForm form;

        protected ErrorHandler()
        {
            handlers=new ArrayList();
            form=new ExceptionForm();
        }
        public static ErrorHandler Instance
        {
            get
            {
                if(self==null)
                {
                    self=new ErrorHandler();
                }
                return self;
            }
        }
        public void addHandler(IHandler handler)
        {
            handlers.Add(handler);
        }
        public void OnThreadException(object sender, ThreadExceptionEventArgs t)
        {
            for(int i=0;i<handlers.Count;i++)
            {                
                if(((IHandler)handlers[i]).ExceptionType==t.Exception.GetType())
                {
                    if(((IHandler)handlers[i]).handle(t.Exception))
                    {
                        return;
                    }
                }                
            }            
            form.Text="Не обработанная ошибка";
            form.Exception=t.Exception;
        }

        public void handle(Exception ex)
        {
            OnThreadException(Thread.CurrentThread,new ThreadExceptionEventArgs(ex));
        }
    }


Этот класс, поидее, должен перехватывать все исключения в приложении.

В майне делаю следующие :
Код

        static void Main() 
        {
            ErrorHandler.Instance.addHandler(new UserExceptionHandler());
            ErrorHandler.Instance.addHandler(new UserInputExceptionHandler());
            Application.ThreadException+=new ThreadExceptionEventHandler(ErrorHandler.Instance.OnThreadException);            
            Application.Run(new ClientMainForm());
        }

UserExceptionHandler,UserInputExceptionHandler - реализуют интерфейс IHandler

Все работает замечательно, но лишь до того момента, когда исключение генерируется в результате работы модального окна. В этом случаее, оно (исключение) куда-то проподает и ни чего не происходит. А нужно, что бы до обработчика доходили все исключения.
Если кто-то уже решал такую проблему то помогите пожалуйста. Буду очень признателен
smile

Это сообщение отредактировал(а) Empirik - 22.11.2005, 11:36
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
-ser-
Дата 23.11.2005, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 13



модальное окно это отдельный класс. из приведенного кода видно, что класс ExceptionForm не знает класс ErrorHandler. для начала можно указать form=new ExceptionForm( this );



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Empirik
Дата 23.11.2005, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Не в этом дело. Если исклюение гененрируется в любом модальном окне приложения, то не перехватывается в глобальном обработчике исключениц, а в MSDN написанно что должно.

В общем вчера решил эту проблему: поставил framework 2.0
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
Empirik
Дата 23.1.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Уважаемые форумчане, теперь наметилась другая проблема: при первой генерации исключения все приложение безбожно тормазит (грубо говоря виснет), как этого избежать? Тоесть сделать так, что бы при первой генерации исключения, приложение не подвисало?
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 23.1.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

Репутация: 110
Всего: 232



Наверное JIT-дебаггер тормозит в первый раз. У пользователей приложения такого быть не должно.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 23.1.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Скомпиль ngen'ом и проверь. Если не тормозит, проблема в JIT'е.
P.S. Кстати, попробуй приставить к классу атрибут [Debuggable(false, false)].
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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