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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват всех Exception'ов в программе, Помогите 
:(
    Опции темы
magnatua
Дата 25.5.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день! Я прошу прощение, если я пишу повторяющую тему или этот вопрос уже "100" раз задавался...

Как реализовать перехват всех исключений в программе? Конечно можно реализовать try...catch, но хотелось как бы глобально...

PM MAIL   Вверх
vponomarov
Дата 25.5.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это должно работать
Код

        static void Main()
        {
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        public static void OnThreadException(object sender, System.Threading.ThreadExceptionEventArgs args)
        {
            Exception e = args.Exception;
            MessageBox.Show("ERROR: " + e.Message);
        }

        public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            MessageBox.Show("ERROR: " + e.Message);
        }



--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
magnatua
Дата 26.5.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое! А вот еще вопрос: а как можно выводить сообщение об исключениях в TextBox?
Тоисть, происходит событие и пишет в ТекстБокс
PM MAIL   Вверх
Chef
Дата 26.5.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Выводит в виде сообщения
Код

MessageBox.Show("ERROR: " + e.Message);

Это выведит в тексбох
Код

public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            TextBox.Text = e.Message;
        }


--------------------
Разговоры об IT
PM MAIL WWW   Вверх
magnatua
Дата 26.5.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Chef, спасибо, но это я знал. Может я неправильно поставил вопрос. 
А как мне вывести в ТекстБокс другого окна? 


Код

public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            TextBox.Text = e.Message;
        }


Это у меня в Program.cs, а я хочу вывести в форме frmMain.LogTextBox
PM MAIL   Вверх
Rififi
Дата 26.5.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



наверное как-то так (не проверял)

Код
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(frmMain.OnUnhandledException);

private void frmMain.OnUnhandledException(object sender, UnhandledExceptionEventArgs args)
{
    if (InvokeRequired)
    { ... } // вызов через делегат
    else
    {
        Exception e = (Exception) args.ExceptionObject;
        LogTextBox.Text = e.Message;
    }
}

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


Бывалый
*


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

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



Подпишись на событие, которое у тебя возникает при исключении

Я бы сделал так, создаем статический клас
Код

static class evn
    {
        static public System.EventHandler ev; // Делегат

        static  public void start(object sender) // Вызываем событие
        {
            ev(sender,null);
        }    
    }

В классе другой формы подписываемся на событие
Код

public Form2()
       {
            InitializeComponent();
            evn.ev += new System.EventHandler(this.text_rewrite); // Подписываемся на событие
        }

        private void text_rewrite(object sender, EventArgs e)//Бедет вызываться при событии
        {
            txtError.Text = sender.toString();

        }

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

evn.start(e.Message,null) ;



--------------------
Разговоры об IT
PM MAIL WWW   Вверх
magnatua
Дата 26.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Учиться...учиться...и еще раз УЧИТЬ! 
Спасибо большое ВСЕ! очень сильно помогли! Респект и Уважухаsmile
PM MAIL   Вверх
sobik
Дата 26.5.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 21.3.2008
Где: Киев, Украина.

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



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

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


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

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


 




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


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

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