AI智能
改变未来

C# 捕获非托管异常

在.NET 4.0之后,CLR将会区别出一些异常(都是SEH异常),将这些异常标识为破坏性异常(Corrupted State Exception)。针对这些异常,CLR的catch块不会捕捉这些异常。SEH异常通常是非托管代码抛出的。例如:调用c和c++的lib和dll库,都是非托管的。解决方法有两种:

1、在托管程序的.config文件里,启用legacyCorruptedStateExceptionsPolicy这个属性,即简化的.config文件类似下面的文件:

<?xml version="1.0"?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup><runtime><legacyCorruptedStateExceptionsPolicy enabled="true" /></runtime></configuration>

2、在需要捕捉破坏性异常的函数外面加一个HandleProcessCorruptedStateExceptions属性,这个属性只控制一个函数,对托管程序的其他函数没有影响

[HandleProcessCorruptedStateExceptions]void function(){try{}catch (Exception e){}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C# 捕获非托管异常