Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
Вернуться   HPC / Кодинг / .NET / C#
   
  Страница 1
  , 12:03   #1
Местный
 
Локация: Cyberspace
Регистрация: 01.07.2008
Сообщений: 122

Репутация: 75 / 1
По умолчанию Немного об исключениях

Всем нам известна поговорка "Хороший программист использует лицензионное соглашение, вместо переписывания с 0 уже написанного кода". К сожалению далеко не все используемые нами библиотеки хорошо документированы. И мы можем просто не знать что один или другой метод породит исключение. А оно в свою очередь может привести к полному обрушению приложения и потери пользовательских данных.
Рассмотрим один из простейших способов решения данной проблемы. Разработчики .NET предусмотрели механизмы по отлову и реакции на такие ситуации на уровне всего приложения. Этот механизм дает возможность программисту первым обработать исключение, и самому решить - продолжить выполнение программы, отдать на обработку исключение .Net, или же закрыть приложение, например, сохранив все данные.

Для этого в методе Main пишем обработчики 2 событий:
C# highlight
AppDomain.CurrentDomain.UnhandledException
Application.ThreadException
C# highlight

        private static LogProvider.Logger lp = new LogProvider.Logger();
        [STAThread]
        static void Main()
        {
/***************************/
            AppDomain.CurrentDomain.UnhandledException +=
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            Application.ThreadException +=
                new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

/**************************/
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
А далее все просто - реализовать наши методы :CurrentDomain_UnhandledException и Application_ThreadException

Вот например так
C# highlight

        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            DialogResult result = DialogResult.Abort;
            try
            {
                Exception ex = (Exception)e.ExceptionObject;

                MessageBox.Show("Произошла ошибка.",
                    "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
                lp.Exception(ex);
            }
            finally
            {
                if (result == DialogResult.Abort)
                {
                    Application.Exit();
                }
            }
        }

        public static void Application_ThreadException
            (object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            DialogResult result = DialogResult.Abort;
            try
            {
                result = MessageBox.Show("Произошла ошибка.", "Application Error",
                    MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
                lp.Exception(e.Exception);
            }
            finally
            {
                if (result == DialogResult.Abort)
                {
                    Application.Exit();
                }
            }
        }
__________________
Live long and prosper.
[SIGPIC][/SIGPIC]
Пользователь вне форума    
Наши Спонсоры
 

Метки
applicationexception, domainexception, exception

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ставки на спорт (реальный заработок немного халявы) Vadim_U Раздачи 14 17.02.2016 09:17
У кого есть свежие proxy скиньте немного) dimix123 Оффтоп 2 22.11.2012 19:33
[Статья] PHP – Include, и немного удачи. tickhack Сайты, Форумы, CMS 0 03.02.2012 03:32
Немного о Вконтакте WenoM Соц. сети 9 03.01.2010 15:18
Немного об index.html Mafan HTML/XML/CSS 0 08.10.2009 01:15



Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.