windows应用程序c#中的异常处理

本文关键字:异常处理 应用程序 windows | 更新日期: 2023-09-27 18:08:00

在一个c# windows应用程序中,我编写了显示所有异常的代码。我尝试了下面的代码。在跟踪模式下运行时(按F5)它工作(我已经编写了创建异常的UI事件函数)。但是当我运行独立的exe时,它不会捕获异常。相反,它被显示为一个未处理的异常。

static void Main()
{
    try
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        MessageBox.Show(ex.StackTrace);
    }
}

有人知道吗?

windows应用程序c#中的异常处理

您最好使用未处理的异常处理程序:

AppDomain.CurrentDomain.UnhandledException +=
        new UnhandledExceptionEventHandler(CatchUnhandledException);

MSDN的更多信息:

  • http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx
  • http://msdn.microsoft.com/en-us/library/ms157905.aspx Y600
  • https://blogs.msdn.com/b/tom_krueger/archive/2005/02/17/375602.aspx

尝试添加UnhandledException处理程序:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler((o, e) => { 
      Exception theException = (Exception)e.ExceptionObject;
      /* CODE TO SHOW/HANDLE THE EXCEPTION */
      Debug.WriteLine(theException.Message);
});

我通常采用这种方法:

static void Main()
{
    Application.ThreadException += ExceptionHandler;
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}
static void ExceptionHandler(object sender, ThreadExceptionEventArgs e)
{
  const string errorFormat = @"some general message that a error occured";
  //error logging, usually log4.net
  string errMessage = string.Format(errorFormat, e.Exception.Message, e.Exception.StackTrace)
  DialogResult result = MessageBox.Show(errMessage, "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
  if (result == DialogResult.No)
  {
    Application.Exit();
  }
}

向用户显示异常消息和堆栈跟踪,并要求终止应用程序。这在测试场景或内部应用程序中非常有用,但是在外部发布详细的消息堆栈跟踪通常不是一个好主意。