我可以在C#中创建一个全局异常处理程序,让代码继续运行吗?

eko*_*lis 11 .net c# exception-handling

在.NET中,默认的异常处理程序将允许用户继续运行该程序.但是,我希望有一个全局异常处理程序将堆栈跟踪保存到"errorlog.txt"文件,以便用户可以将其发送给我,而不必记住单击"详细信息"并将其复制出来对话框(并删除所有关于加载的程序集等无用的废话).但是当我这样做时,代码不知道如何继续,所以我所能做的就是退出应用程序.有没有办法让两全其美?(是的,我知道我要求的是带有日志的"On Error Resume Next",但我真的觉得它会很有用!)

Sam*_*uel 27

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Run Code Online (Sandbox Code Playgroud)

如果在应用程序启动时将自己绑定到此事件,则应该能够捕获应用程序抛出的任何Unhandled Exception,并将其保存到文件中.(使用Exception对象部分UnhandledExceptionEventArgs.我不相信可以从错误发生的地方恢复.


Ton*_*ile 4

您可以编写一个在每个块中调用的全局异常处理程序方法catch,该方法将堆栈跟踪写入您想要保存的位置。但是您需要try . . . catch为需要它们的每个操作编写块,并在每个操作中调用异常处理程序。

您还可以在处理程序中为所有未处理的事件调用该全局异常处理程序方法MyApplication.UnhandledException。但是在这种情况下,当控制权到达该方法时,程序将不会继续运行。