首页 / 知识
关于c#:如何捕获.NET应用程序中的所有异常/崩溃
2023-04-16 13:01:00

How to catch ALL exceptions/crashes in a .NET app本问题已经有最佳答案,请猛点这里访问。
我有一个崩溃的.NET控制台应用程序应用程序并向用户显示一条消息。 在Win32应用程序中,您可以通过安装各种异常处理程序捕获所有可能的异常/崩溃:
什么是.NET世界中的等价物,所以我可以处理/记录/安静所有可能的错误情况? 您可以向AppDomain.UnhandledException事件添加事件处理程序,并在抛出异常并且未捕获异常时调用它。 与其他人发布的内容相反,捕获所有异常并没有错。重要的是要妥善处理它们。如果您有堆栈溢出或内存不足的情况,应该关闭应用程序。此外,请记住,OOM条件可以防止您的异常处理程序正常运行。例如,如果异常处理程序显示带有异常消息的对话框,则如果内存不足,则可能没有足够的空间用于对话框显示。最好记录并立即关闭。 正如其他人所提到的,您可以处理可能会错过的集合异常的UnhandledException和ThreadException事件。然后简单地在主循环周围抛出一个异常处理程序(假设一个winforms应用程序)。 此外,您应该知道,对于内存不足的情况,并不总是抛出OutOfMemoryExceptions。 OOM条件可以触发代码或框架中的各种异常,这些异常不一定与真实基础条件内存不足有关。当底层原因实际上没有内存时,我经常看到InvalidOperationException或ArgumentException。
我们的主持人Jeff Atwood在codeproject中的这篇文章就是您所需要的。
Global.asax类是你的最后一道防线。
方法 请注意,某些异常是危险的 - 或者大多数是无法捕获的,
虽然在没有正确处理它们的计划的情况下捕获所有异常肯定是一种不好的做法,但我认为应用程序应该以一种优雅的方式失败。崩溃不应该吓死用户,至少它应该显示错误的描述,一些信息要报告给技术支持人员,理想情况下是关闭应用程序并重新启动它的按钮。在理想的世界中,应用程序应该能够在磁盘上转储用户数据,然后尝试恢复它(但我发现这要求太多)。 无论如何,我通常使用:
您可以使用AppDomain.CurrentDomain.UnhandledException来获取事件。 您也可以使用Application.ThreadException事件。 一旦我开发在基于COM的应用程序内运行的.NET应用程序;这个事件非常有用,因为AppDomain.CurrentDomain.UnhandledException在这种情况下不起作用。 请注意,捕获这些未处理的异常可能会更改应用程序的安全性要求。您的应用程序可能会在某些上下文(从网络共享等运行时)停止正常运行。一定要彻底测试。
我认为您甚至不应该捕获所有异常,但最好让它们向用户显示。原因是你应该只捕获你可以实际处理的异常。如果遇到一些导致程序停止但仍然捕获它的异常,这可能会导致更严重的问题。
使用两者都没有坏处 但请记住,这些处理程序不会捕获辅助线程上的异常;如果需要,使用SafeThread作为辅助线程 |
最新内容
相关内容
linux命令和应用程序?
linux命令和应用程序?,软件,系统,环境,管理,基础,情况,位置,电脑,工具,中心,在linux下如何装应用程序?需要什么命令啊首先从官网下载hdf5,根据Python可以做桌面应用程序吗
Python可以做桌面应用程序吗,平台,系统,较大,标准,培训,界面,桌面,文档,入门,开发者,python可以做桌面应用程序!目前比较主流的几个GUI平台:1python如何捕获Python中的异常
python如何捕获Python中的异常,异常,代码,数字,系统,培训,意外,流程,名称,情况,合法,python提供了tryexcept语句捕获并处理异常,该异常处理语关于Visual C ++:屏幕捕获在Vista中
关于Visual C ++:屏幕捕获在Vista中的MFC应用程序上不起作用,关于Visual C ++:屏幕捕获在Vista中的MFC应用程序上不起作用,例程,绘制,关于ruby:在日历应用程序中为重复事
关于ruby:在日历应用程序中为重复事件建模的最佳方法是什么?,关于ruby:在日历应用程序中为重复事件建模的最佳方法是什么?,事件,应用程关于c#:如果我在visual studio中选择
关于c#:如果我在visual studio中选择它,“转换为Web应用程序”选项会怎样?,关于c#:如果我在visual studio中选择它,“转换为Web应用程序”关于java:什么是基于Swing的应用程
关于java:什么是基于Swing的应用程序的最佳测试工具?,关于java:什么是基于Swing的应用程序的最佳测试工具?,发现,单元测试,级别,设置,Wha关于视频:Bursty向SD / USB写入内容
关于视频:Bursty向SD / USB写入内容使我的时间紧迫的应用程序停滞在嵌入式Linux上,关于视频:Bursty向SD / USB写入内容使我的时间紧关于ipc:如何从Perl脚本中捕获系统
关于ipc:如何从Perl脚本中捕获系统命令的stdin和stdout?,关于ipc:如何从Perl脚本中捕获系统命令的stdin和stdout?,系统命令,执行,字符串关于Windows XP:检测应用程序崩溃并
关于Windows XP:检测应用程序崩溃并重新启动的最佳方法?,关于Windows XP:检测应用程序崩溃并重新启动的最佳方法?,方法,程序崩溃,检测,关于.net:引用Microsoft.SqlServer.
关于.net:引用Microsoft.SqlServer.Smo的应用程序需要在目标计算机上包含其他程序集吗?,关于.net:引用Microsoft.SqlServer.Smo的应用最小化时如何将.net应用程序放在系
最小化时如何将.net应用程序放在系统托盘中?,最小化时如何将.net应用程序放在系统托盘中?,应用程序,最小化,代码示例,很好,how to put