捕获所有错误,而不仅仅是单个按钮

时间:2013-12-26 21:55:20

标签: c# winforms error-handling

我想要一个普通的捕获所有错误,适用于所有函数。现在,我试着抓住每个单独的按钮点击特定事件。我需要为我的整个程序捕获所有错误,其中包括可以捕获我可能错过的任何个别异常的所有按钮单击。有人可以指出我正确的方向

我目前的代码:

private void Show_btn_Click(object sender, EventArgs e)
{
  try
 {
   //do something
 }
 catch (Exception error)
 {
    outputLOG.Append(error.ToString());
 {
}

private void Submit_btn_Click(object sender, EventArgs e)
{
  try
 {
   //do something
 }
 catch (Exception error)
 {
    outputLOG.Append(error.ToString());
 }
}

目标:我想抓住所有按钮以防万一我错过了个别例外

编辑:我正在使用winforms

1 个答案:

答案 0 :(得分:0)

在输入应用程序的第一个表单之前添加这些行(通常在program.cs中的main方法中)

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
......

private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    string msg = e.Exception.Message;
    if (e.Exception.InnerException != null)
    {
        msg = msg + "\r\nPrevious error:" + e.Exception.InnerException.Message;
    }
    msg = msg + "\r\n\r\nDo you wish to continue with the application?";
    DialogResult dr = MessageBox.Show(msg, "Exception", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (dr == DialogResult.No) Application.Exit();
}

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Exception ex = e.ExceptionObject as Exception;
    if (ex != null)
    {
        string msg = ex.Message;
        if (ex.InnerException != null)
        {
            msg = msg + "\r\nPrevious error :" + ex.InnerException.Message;
        }
        msg = msg + "\r\n\r\nIt is not possible to continue. Contact support service!";
        MessageBox.Show(msg, "Fatal Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}