// Handle the UI exceptions by showing a dialog box, and asking the user whether // or not they wish to abort execution. // NOTE: This exception cannot be kept from terminating the application - it can only // log the event, and inform the user about it. private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { Exception ex = (Exception)e.ExceptionObject; string errorMsg = "An application error occurred. Please contact the Developer. Information can be found in \" Errorlog \" file."; MessageBox.Show(errorMsg, "Non-UI Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); FormMain.ErrorLogWriter(ex.Message + "\n\nStack Trace:\n" + ex.StackTrace); } catch (Exception exc) { try { MessageBox.Show("Fatal Non-UI Error. Could not write the error to the event log.\r\nReason: " + exc.Message, "Fatal Non-UI Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); } finally { Application.Exit(); } } }
// Handle the UI exceptions by showing a dialog box, and asking the user whether // or not they wish to abort execution. private static void UIThreadException(object sender, ThreadExceptionEventArgs t) { DialogResult result = DialogResult.Cancel; try { Exception ex = t.Exception; string errorMsg = "An application error occurred. Please contact the Developer. Information can be found in \" Errorlog \" file."; FormMain.ErrorLogWriter(ex.Message + "\n\nStack Trace:\n" + ex.StackTrace); result = MessageBox.Show(errorMsg, "Windows Forms Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); } catch { try { MessageBox.Show("Fatal Windows Forms Error", "Fatal Windows Forms Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); } finally { Application.Exit(); } } // Exits the program when the user clicks Abort. if (result == DialogResult.Abort) { Application.Exit(); } }