我想在C#中的UI应用程序中捕获所有未处理的异常,以便我可以记录它们,通过邮件发送它们并重新启动应用程序。
我怎样才能完成这项工作?我试过了:
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainDlg());
}
catch (Exception e)
{
Logger.Log(e);
Logger.PostLog();
System.Diagnostics.Process.Start("App.exe");
}
但它允许一些例外。
答案 0 :(得分:3)
您可以将此代码放入Program.cs:
static void Application_ThreadException(object sender,
ThreadExceptionEventArgs e) //Generic error handler
{
MyApp.LogException(e.Exception); //Log exception
BugReport frmBugReport = new BugReport();
frmBugReport.Error = e.Exception;
frmBugReport.ShowDialog();
Environment.Exit(0);
}
我在我的应用中显示错误报告对话框。你可以使用Application.Restart()(我记得)来改变Environment.Exit(0)。
答案 1 :(得分:2)
Peter Bromberg有一篇关于处理未处理异常的各种方法的文章。 他描述了以下方法:
Getting Better Information on Unhandled Exceptions
关于我之前对该问题的评论:除非迫切需要重新启动崩溃的应用程序 - 我不会自动重启应用程序,因为你可能会陷入循环。如果你必须重新启动它,请向用户提供选择在重新启动之前重新启动应用程序。这样,如果它出错,用户可以保释。
答案 2 :(得分:1)
您需要订阅UnhandledException
中的AppDomain
个活动。见http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(VS.71).aspx