2013-04-14 33 views
2
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
Forms.Application.ThreadException += 
    new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

是代码我删除了类似的问题,但它未能解决我的情况。 我想要做的是赶上崩溃和正确处置我的应用程序,所以我不留下内存转储/痕迹/系统托盘图标捕捉异常,并在程序崩溃时正确处理程序

+1

什么异常不被'AppDomain异常处理程序'捕获?你能显示一些代码吗? –

+0

当我在Visual Studio调试器中关闭它时,它会留下系统托盘图标和其他未定义的项目,我很确定以后无法恢复...我如何强制它正常关闭,我恐怕它也会从另一个原因发生,并且可能会导致一些最终用户问题,因为它不再在调试器中。 – pl0xtic

+1

“当我在Visual Studio调试器中关闭它时”是否是个例外?如果你只是停止调试一个进程,当然清理不会被执行,因为你有效地中止了进程。 –

回答

0

如果您终止进程使用调试器或任务管理器,有没有办法来处理这种情况 - 无论是.NET应用程序还是本地应用程序。

在CLR中处理OS异常可能是可能的,但不建议。有关更多详细信息,请参见Is it possible to catch an access violation exception in .NET?

在几乎所有情况下,您的进程都不应该以这些方式终止,即使这样做,也不需要进行正确的处理,因为操作系统可以正确关闭几乎所有的句柄:文件,连接等。终止的应用程序将托盘图标留在后面是Explorer中的一个20年的bug,你无法做任何事情。我们只希望微软有一天能够解决它。

相关问题