Обработка необработанных исключений.
От: Barlog M. Россия  
Дата: 24.01.07 15:14
Оценка:
Здравствуйте.

Первый раз пришлось проектировать и писать программу целиком и полностью самому. Это клиент для небольшой БД.
Возник вопрос по обработке исключений. Т.е. я конечно заворачиваю то, что считаю нужным в try catch, где, помоему данные всегда будут верными — этого не делаю. Т.е. не обрабатываю всё возможные исключения. И конечно-же иногда ошибаюсь. У пользователя программа просто закрываетя, сама-по себе. Не хорошо. И реализовал я такой код в Program.cs:
            MainForm mainForm = new MainForm();

#if DEBUG
            Application.Run(mainForm);
#else
            try {
                Application.Run(mainForm);
            }
            catch (Exception ex) {
                string fileName = Application.StartupPath + @"\"
                    + Path.GetFileNameWithoutExtension(Application.ExecutablePath)
                    + ".crtitical";
                using (Stream s = File.Open(fileName, FileMode.Append, FileAccess.Write, FileShare.Read))
                using (TextWriter tw = new StreamWriter(s)) {
                    StringBuilder sb = new StringBuilder();
                    do {
                        sb.Append(ex.ToString());
                        sb.Append(Environment.NewLine);
                    } while ((ex = ex.InnerException) != null);

                    tw.WriteLine(DateTime.Now.ToLocalTime());
                    tw.WriteLine(sb.ToString());
                    tw.WriteLine();
                }
                mainForm.ErrorSaveData();
                MessageBox.Show("Программа выполнила недопустимую операцию и будет закрыта.", "Критическая ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
#endif


Может конечно данных и маловато пишется в лог, но это поправимо, другое дело ещё и mainForm.ErrorSaveData();
Там у меня происходит сохранение данных в БД, если есть изменения, это делается в транзакции и отлавливаются любые исключения, т.е. я посчитал, что если при критической ошибке данные будут целыми и есть возможность их сохранить, пусть
это произойдёт, а если сохранить возможности нет, то это молча проигнорируется.

Вопрос — такое решение имеет право насуществование или подобные вещи делаются по-другому?
... << RSDN@Home 1.2.0 alpha rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.