C# 捕获异常并在程序崩溃时正确处理它

C# 捕获异常并在程序崩溃时正确处理它,c#,winforms,crash,applicationdomain,C#,Winforms,Crash,Applicationdomain,我剪下的代码是一个类似的问题,但它无法解决我的问题。 我试图做的是捕获崩溃并正确处理我的应用程序,这样我就不会留下内存转储/跟踪/systray图标如果使用调试器或任务管理器终止进程,则无法处理这种情况--无论是.NET应用程序还是本机应用程序 可以在CLR中处理操作系统异常,但不建议这样做。有关更多详细信息,请参阅 在几乎所有情况下,您的进程都不应该以这些方式终止,即使终止,也不需要进行适当的处理,因为操作系统将正确关闭几乎所有的句柄:文件、连接等。终止的应用程序在Explorer中留下托盘图

我剪下的代码是一个类似的问题,但它无法解决我的问题。
我试图做的是捕获崩溃并正确处理我的应用程序,这样我就不会留下内存转储/跟踪/systray图标

如果使用调试器或任务管理器终止进程,则无法处理这种情况--无论是.NET应用程序还是本机应用程序

可以在CLR中处理操作系统异常,但不建议这样做。有关更多详细信息,请参阅


在几乎所有情况下,您的进程都不应该以这些方式终止,即使终止,也不需要进行适当的处理,因为操作系统将正确关闭几乎所有的句柄:文件、连接等。终止的应用程序在Explorer中留下托盘图标是一个20年的错误,您对此无能为力。我们只希望微软有一天能解决它。

什么异常不会被
AppDomain异常处理程序捕获?你能展示一些代码吗?当我在VisualStudio调试器中关闭它时,它会留下systray图标和其他我确信以后无法恢复的未损坏项。。。我该如何强制它正确关闭,我担心它也会从另一个原因发生,并且可能会导致一些最终用户问题,因为它不再在调试器中。“当我在Visual Studio调试器中关闭它时”这是否是一个例外?如果您只是停止调试一个进程,那么当您有效地中止该进程时,当然不会执行清理。您使用的是什么版本的.NET framework?
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Forms.Application.ThreadException += 
    new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);