技术开发 频道

CLR 4.0新特性之状态错乱异常

  【IT168 技术文档】

  状态错乱异常

  有人叫它超级异常. 指的是未捕获异常, 打乱了程序的状态, 引起程序崩溃, 或者导致不想看到的程序行为, 如同神经错乱. CLR4.0针对未捕获异常做了一种可配置的处理机制. 请看下面的程序. 在CLR2.0里, 这个catch (Exception ex) 将所有可能发生的异常都捕获. 在CLR4.0里, 默认情况下这个超级catch不会生效, 一旦出现异常就会导致程序停止.

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>
0
相关文章