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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка исключений для всей программы 
V
    Опции темы
deviLoper
Дата 28.8.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть достаточно большое приложение в котором иногда возникают ошибки  smile 
Хотелось бы написать обработчик для непредвиденных ошибок, который выдавал бы пользовтателю сообщение вместо стандартного 
"Unhandled exception has occured in your application....."
Пробывал так:
Код

[STAThread]
        static void Main()
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new frmMain());
            }
            catch (Exception ex)
            {
                                MessageBox.Show("В прогрмме произошла ошибка.\nИзвените за неудобства\nПрограммисту отправлен отчет об ошибке", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Но такой код работет, только если запускаю приложение из Visual Studio. Когда запускаю ехе'шник при возниконовении ошибки выдается неприятный диалог.

Это сообщение отредактировал(а) deviLoper - 28.8.2007, 12:47

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  ______.JPG 22,80 Kb
PM MAIL   Вверх
SpaceSpace
Дата 28.8.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так не делают.
это очень плохой стиль.

исключения нужно локализовать,
т.е.  блоки try\catch должны размещаться в месте возможного исключения,
по всему тексту вашего "большого" приложения.


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
deviLoper
Дата 28.8.2007, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

P. S. А повторять одинаковый код обработчиков исключений по всей программе то же 
Цитата
очень плохой стиль


PM MAIL   Вверх
Experimenter
Дата 28.8.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возможно, исключение тем не менее возникает где-то вне обработчика???

Насчет стиля согласен со СпейсСпейсом. Что это за программа, в которой ошибка может в любом месте возникнуть???


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Stepan_Lameroff
Дата 28.8.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Посмотрите AppDomain.UnhandledException Event и Application.ThreadException Event

Интересная статья по теме Simple Main


Это сообщение отредактировал(а) Stepan_Lameroff - 28.8.2007, 20:47
PM MAIL   Вверх
andrx
Дата 29.8.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


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

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



можно примерно так (для vs2003) :
Код

public class main
    {
        main(){}
        /// <summary>Main.</summary>
        [STAThread]
        static void Main() 
        {
            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
            Application.EnableVisualStyles();
            Application.Run(new ФормаГлавная(_ПриложениеКоманды.ЗапускПрограммы,null));
        }
        private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            // вывести сообщение об ошибке
            Ошибка._Ошибка = ОшибкаПеречень.НепредусмотреннаяОшибка;

            // если лог-файл больше 100м -удалить его
            FileInfo fileLog = new FileInfo("log.txt");
            if ( fileLog.Exists ) { if ( fileLog.Length > 100000000) { fileLog.Delete(); } }
                
            StreamWriter sw = new StreamWriter("log.txt",true,System.Text.Encoding.Default);
            sw.WriteLine();
            sw.WriteLine("---[ "+ DateTime.Now.ToShortDateString() +", "+ DateTime.Now.ToLongTimeString() +" ]--------------------------------------------------------------------------------");
            sw.WriteLine(e.Exception.ToString());
            sw.Close();            
        }
    }


Это сообщение отредактировал(а) andrx - 29.8.2007, 09:23
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
deviLoper
Дата 29.8.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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


 




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


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

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