zoukankan      html  css  js  c++  java
  • C#不能捕捉的异常,如AccessViolationException

      在.net的异常机制中,有部分严重的编程错误(系统的某些Corrupted State Exceptions异常)是默认不被用户使用常规的异常捕捉方式捕捉到的。

      微软的这种设计方式,是让用户必须处理该异常,否则程序将无法正常运行。目前发现两种情况,但解决方法通用。

    1、AccessViolationException异常

      AccessViolationException:当代码尝试读取或写入尚未分配或无法访问的内存时,非托管或不安全代码中会发生访问冲突。其只在可验证托管代码与非托管代码或不安全的托管代码交互出现。如果异常发生在公共语言运行库保留的内存之外,则公共语言运行库抛出的AccessViolationException异常不会由catch结构化异常处理程序中语句处理,需要在方法前添加HandleProcessCorruptedStateExceptionsAttribute特性。

    2、属性的get中调用栈的东西

      如果属性的get方法中使用了调用栈的东西,可能会出现调用栈异常,最好变成方法(在编程建议中,get和set中不应该进行复杂的逻辑判断)。

      如获得时间间隔的属性:

    private long startRecordTime;
    public double RecordInterval
    {
        get
        {
            double interval = 0;
            try
            {
                long tick = DateTime.Now.Ticks;
                if (startRecordTime <= 0)
                {
                    startRecordTime = DateTime.Now.Ticks;
                }
                interval = TimeSpan.FromTicks(tick - startRecordTime).TotalSeconds;
            }
            catch (Exception ex)
            {
                interval = 0;
            }
            return interval;
        }
    }

      在调用属性时,序列化可能会出现:“Cannot evaluate expression because a native frame is on the top of the call stack”问题。该异常与AccessViolationException类似,无法使用常规的try…catch捕捉到。

  • 相关阅读:
    开源协议
    开发新技能
    UML 思维导图 思维脑图 xmind
    小方法
    Android Service
    JS 下载图片
    quartz任务执行完之后再执行下一轮任务
    easyui 下边有滚动条问题
    微信支付证书 系统找不到指定的文件
    Swiper 动态加载数据没有变化问题
  • 原文地址:https://www.cnblogs.com/pilgrim/p/10287972.html
Copyright © 2011-2022 走看看