代码处理我项目中未处理的异常,如下所示。
static void FnUnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs _UnhandledExceptionEventArgs)
{
Exception _Exception = (Exception)_UnhandledExceptionEventArgs.ExceptionObject;
OnUnwantedCloseSendEmail(_Exception.Message);
}
我正在使用 OnUnwantedCloseSendEmail 方法发送错误报告的电子邮件。 OnUnwantedCloseSendEmail方法的最后一行是 Application.Restart();
当这种方法正常工作时,.net框架会显示错误的提示窗口,如下所示,应用程序不会关闭并重新启动,直到按下退出按钮。
如何在没有此提示的情况下退出应用程序,如何在应用程序冻结时应用此方法。
答案 0 :(得分:0)
您可能需要查看Application.SetUnhandledExceptionMode方法。使用UnhandledExceptionMode.ThrowException
参数调用此方法将阻止Winform将异常路由到Application.ThreadException
事件,因此此对话框将不会显示。
您还可以更改app.config文件以获得相同的结果:
<configuration>
<system.windows.forms jitDebugging="true"/>
</configuration>
Personnaly我更喜欢硬编码路线。
我们很清楚:这只会摆脱对话,而不是解决实际的程序集加载或应用程序冻结问题。 :)
答案 1 :(得分:0)
你应该能够用这个
抓住一切 [STAThread]
public static void Main()
{
// let IDE to handle exceptions
if (System.Diagnostics.Debugger.IsAttached)
Run();
else
try
{
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Run();
}
catch (Exception e)
{
// catch exceptions outside of Application.Run
UnhandledException(e);
}
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// catch non-ui exceptions
UnhandledException(e.ExceptionObject as Exception);
}
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
// catch ui exceptions
UnhandledException(e.Exception);
}
private static void UnhandledException(Exception e)
{
try
{
// here we restart app
}
catch
{
// if we are here - things are really really bad
}
}