乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 71|回复: 4

请教老大们关于取得对象扩展数据引起的CAD崩溃

[复制链接]

32

主题

140

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
268
发表于 2014-9-12 17:32:00 | 显示全部楼层 |阅读模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk..Runtime;
using Autodesk.AutoCAD.EditorInput;
using System.Windows.Forms;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.ApplicationServices;
using Application = Autodesk.AutoCAD.ApplicationServices.Application;
using Document = Autodesk.AutoCAD.ApplicationServices.Document;
[assembly: CommandClass(typeof(Cheng5276_CAD.Class1))]
namespace Cheng5276_CAD
{
    public class Class1
    {
        public void doc_ImpliedSelectionChanged(object sender, EventArgs e)
        {
            Autodesk.AutoCAD.EditorInput.Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptSelectionResult pkf = ed.SelectImplied();
            if (pkf.Status != PromptStatus.OK)
            { //取消选择状态
                return;
            }
            else
            { //对象选择状态
ObjectId[] objIds = pkf.Value.GetObjectIds();
                Document doc = Application.DocumentManager.MdiActiveDocument;
                Transaction trans = doc.TransactionManager.StartTransaction();
                foreach (ObjectId objId  in objIds)
                {
                    
                    try
                    {
                        DBObject obj = trans.GetObject(objId, OpenMode.ForRead);
                        ResultBuffer rb = obj.XData;
                        if (rb != null)
                        {
                            foreach (TypedValue tv in rb)
                            {
                                if (tv.TypeCode == 1000)
                                {
                                    string zg_t = tv.Value.ToString();
                                    break;
                                }
                            }
                            rb.Dispose();
                        }
                        trans.Commit();
                        obj.Dispose();
                    }
                    catch { }
                }
                doc.Dispose();
                trans.Dispose();
            }
        }
        [CommandMethod("FF")]
        public void Initialize()
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            acDoc.ImpliedSelectionChanged += new EventHandler(doc_ImpliedSelectionChanged); //定义对象选择事件
       }
    }
}
NET加载后,执行FF启用事件。
但是只要选择对象后,随便干什么,都会引起CAD崩溃,实在不明原因,请老大们指点
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-9-12 17:57:00 | 显示全部楼层
文档相关的操作先加锁试试 另外你获取实体的代码呢 如果事务外调用实体会崩溃 因为实体已释放
回复

使用道具 举报

32

主题

140

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
268
发表于 2014-9-15 18:19:00 | 显示全部楼层
老大,不好意思,能请您说的更详细些么?谢谢了
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-9-15 18:58:00 | 显示全部楼层
把所有的Dispose()都去掉 事务完成后会自动调用的
回复

使用道具 举报

32

主题

140

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
268
发表于 2014-9-16 13:36:00 | 显示全部楼层
爱死您了,我的版主大人
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 21:33 , Processed in 0.418276 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表