yanghao1 发表于 2012-10-31 11:53:22

同一个函数不能连续执行2次,第一次执行正常,第二次执行则出现致命性错误

同一个函数不能连续执行2次,第一次执行正常,第二次执行则在一个主要语句处出现致命性错误

就是连续执行下面这个函数2次:
      public void 实体改色(string 层名, Autodesk.AutoCAD.Colors.Color 颜色)
      {
            TypedValue[] 过滤项 = new TypedValue[] { new TypedValue((int)DxfCode.LayerName, 层名) };
            SelectionFilter 过滤器 = new SelectionFilter(过滤项);
            全选择结果 = ed.SelectAll(过滤器);
            Entity ent = null;
            using (tm)
            {
                foreach (ObjectId oid in 全选择结果.Value.GetObjectIds())
                {
                  ent = tm.GetObject(oid, OpenMode.ForRead) as Entity;
                  ent.UpgradeOpen();
                  ent.Color = 颜色;
                }
                tm.Commit();
            }
            doc.Editor.Regen();
      }

连续执行2次:
      实体改色("abc", 颜色1);//执行第1次
      实体改色("tkp", 颜色2);//执行第2次
当执行第2次时,在这一句:
ent = tm.GetObject(oid, OpenMode.ForRead) as Entity;
出现致命性错误。不知为什么?

sailorcwx 发表于 2012-10-31 14:36:44

tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试

yanghao1 发表于 2012-10-31 17:21:02

sailorcwx 发表于 2012-10-31 14:36 static/image/common/back.gif
tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试

谢谢先生指点!
tm改成局部后可以连续执行两次,但关闭autocAD窗口时出现致命性错误,这是怎么回事。

yanghao1 发表于 2012-10-31 20:36:35

sailorcwx 发表于 2012-10-31 14:36 static/image/common/back.gif
tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试

请问先生,事物是否不可以声明为类变量而只能在函数中随时使用随时声明为局部变量。
而Document、Database 、Editor 可以声明为类变量。

huaxiamengqing 发表于 2012-11-1 12:43:59

都可以声明为类模块里面的变量。

扮风随雨 发表于 2012-12-24 11:38:06

using中出去后tm就销毁了,定义成局部变量

tth02 发表于 2013-8-3 19:44:59

OpenMode.ForRead是否应该改成forwrite?

gruand 发表于 2013-8-5 09:29:08

怎么解决的啊
页: [1]
查看完整版本: 同一个函数不能连续执行2次,第一次执行正常,第二次执行则出现致命性错误