C# 异常处理 状态错乱异常 Corrupted state Exception
2014-08-12 11:28
543 查看
CLR 4.0有哪些新东西? -- 状态错乱异常 Corrupted state Exception
状态错乱异常Corrupted state Exception
根据评论, 又去看了更多的英文资料. 对此文进行了修改. 感谢大家的意见.有人叫它超级异常. 指的是操作系统提出的未捕获异常, 例如: Access Violation Exception, Invalid Memory Exception, 等等. 处理不当, 会打乱程序的状态, 引起程序崩溃, 或者导致不想看到的程序行为, 如同神经错乱. CLR4.0针对状态错乱异常做了一种可配置的处理机制. 请看下面的程序. 在以前的CLR里, 这个catch (Exception
ex) 将所有可能发生的异常(包括状态错乱异常)都捕获. 在CLR4.0里, 默认情况下CLR4.0不会将操作系统提出的异常提交给托管代码. 因此默认情况下, 这个超级catch不会遇到状态错乱异常, 其它由CLR引发的异常还是可以捕获的.
class Program { static void Main(string[] args) { SaveFile("file.txt"); Console.ReadLine(); } public static void SaveFile(string fileName) { try { FileStream fs = new FileStream(fileName, FileMode.Create); } catch (Exception ex) { Console.WriteLine("File open error"); throw new IOException(); } } }
因为存在某些特殊情况, 需要改变默认的策略. CLR 4.0提供了两种定制的手段
[HandleProcessCorruptedStateExceptions]方法标注(Method attribute)
在需要超级catch的方法前面加上这个标注.就可以让超级catch也能捕获状态错乱异常, 入下:
[HandleProcessCorruptedStateExceptions] public static void SaveFile(string fileName) { try { FileStream fs = new FileStream(fileName, FileMode.Create); } catch (Exception ex) { Console.WriteLine("File open error"); throw new IOException(); } }
注:这个方式只能在此方法内生效. 在其它地方还是按CLR4.0的默认方式处理.
config配置文件
如果想在整个应用级改变这个策略, 就在config配置文件中写上
<?xml version="1.0"?> <configuration> <runtime> <legacyCorruptedStateExceptionsPolicy enabled="true"/> </runtime> </configuration>
参考资料:
http://eknowledger.spaces.live.com/blog/cns!F475D4DE444DB1AB!3256.entry http://msdn.microsoft.com/en-us/magazine/cc793966.aspx http://msdn.microsoft.com/en-us/magazine/dd419661.aspx http://geekswithblogs.net/sdorman/archive/2008/11/07/clr-4.0-corrupting-state-exceptions.aspx
相关文章推荐
- CLR 4.0有哪些新东西? -- 状态错乱异常 Corrupted state Exception
- C#调用参数为函数指针的API函数 - 以SetUnhandledExceptionFilter为例编写一个全局异常处理程序
- C#基础知识梳理系列十:异常处理 System.Exception
- C#读写Word文档异常处理解析System.Runtime.InteropServices.COMException
- C# B/S程序中出现“异常详细信息: System.Data.SqlClient.SqlException: 用户 'XXX/ASPNET' 登录失败。”的处理方法
- C#之解决 未处理的“System.InvalidOperationException”类型的异常出现在 System.dll中...
- CSE(Corrupted State Exceptions) 严重异常处理办法
- C#读写Word文档异常处理解析System.Runtime.InteropServices.COMException
- C#之解决 未处理的“System.InvalidOperationException”类型的异常出现在 System.dll中...
- C#基础知识梳理系列十:异常处理 System.Exception
- C#基础知识梳理系列十:异常处理 System.Exception
- c# 处理大批量数据 时遇到 类型为“System.OutOfMemoryException”的异常
- .Net 4.0中处理Corrupted State Exceptions异常
- C#基础知识梳理系列十:异常处理 System.Exception
- 使用C#在VS中开发:未处理AccessViolationException “System.AccessViolationException”类型的未经处理的异常
- 关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理
- .NET中的Exception处理(C#)
- C#.Net开发基于Oracle数据库系统常见异常处理
- 2006年7月20日 Java中的异常处理 ( Exception) Java的编码规范(code style)
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法