明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1540|回复: 7

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

[复制链接]
发表于 2012-10-31 11:53:22 | 显示全部楼层 |阅读模式
同一个函数不能连续执行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;
出现致命性错误。不知为什么?

发表于 2012-10-31 14:36:44 | 显示全部楼层
tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试
 楼主| 发表于 2012-10-31 17:21:02 | 显示全部楼层
sailorcwx 发表于 2012-10-31 14:36
tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试

谢谢先生指点!
tm改成局部后可以连续执行两次,但关闭autocAD窗口时出现致命性错误,这是怎么回事。
 楼主| 发表于 2012-10-31 20:36:35 | 显示全部楼层
sailorcwx 发表于 2012-10-31 14:36
tm是全局变量?第一次运行后已经销毁了,所以第二次会出错。把tm改成局部变量试试

请问先生,事物是否不可以声明为类变量而只能在函数中随时使用随时声明为局部变量。
而Document、Database 、Editor 可以声明为类变量。
发表于 2012-11-1 12:43:59 | 显示全部楼层
都可以声明为类模块里面的变量。
发表于 2012-12-24 11:38:06 | 显示全部楼层
using中出去后tm就销毁了,定义成局部变量
发表于 2013-8-3 19:44:59 | 显示全部楼层
OpenMode.ForRead是否应该改成forwrite?
发表于 2013-8-5 09:29:08 | 显示全部楼层
怎么解决的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:49 , Processed in 0.165657 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表