Здравствуйте.
Первый раз пришлось проектировать и писать программу целиком и полностью самому. Это клиент для небольшой БД.
Возник вопрос по обработке исключений. Т.е. я конечно заворачиваю то, что считаю нужным в 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>>