在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);
}
}
有人知道吗?
答案 0 :(得分:2)
您最好使用未处理的异常处理程序:
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CatchUnhandledException);
有关MSDN的更多信息:
答案 1 :(得分:0)
我通常采用这种方法:
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();
}
}
这将向用户显示异常的消息和堆栈跟踪,并要求终止该应用程序。这在测试场景或内部应用程序中非常有用,但在野外发布消息的详细堆栈跟踪通常是个坏主意。
答案 2 :(得分:0)
尝试添加UnhandledException
处理程序:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler((o, e) => {
Exception theException = (Exception)e.ExceptionObject;
/* CODE TO SHOW/HANDLE THE EXCEPTION */
Debug.WriteLine(theException.Message);
});