zy19860604 发表于 2011-10-20 17:06:38

读取属性块出现的问题??

using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
namespace MyApplication
{
    class DumpAttributes
    {
      
      public void ListAttributes()
      {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            Database db = HostApplicationServices.WorkingDatabase;
            Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                TypedValue[] filList = new TypedValue;
                filList = new TypedValue((int)DxfCode.Start, "Insert");
                SelectionFilter filter = new SelectionFilter(filList);
                PromptSelectionOptions opts = new PromptSelectionOptions();
                opts.MessageForAdding = "Select block references:";
                PromptSelectionResult res = ed.GetSelection(opts, filter);
                if (res.Status != PromptStatus.OK)
                {
                  return;
                }
                SelectionSet selSet = res.Value;
                ObjectId[] idArray = selSet.GetObjectIds();
                foreach (ObjectId blkId in idArray)
                {
                  BlockReference blkRef = (BlockReference)trans.GetObject(blkId, OpenMode.ForRead);
                  BlockTableRecord btr = (BlockTableRecord)trans.GetObject(blkRef.BlockTableRecord, OpenMode.ForRead);
                  ed.WriteMessage("\nBlock:" + btr.Name);
                  btr.Dispose();
                  AttributeCollection attCol = blkRef.AttributeCollection;
                  foreach (ObjectId attId in attCol)
                  {
                        AttributeReference attRef = (AttributeReference)trans.GetObject(attId, OpenMode.ForRead);
                        string str = ("\n Attribute Tag:" + attRef.Tag + "\n Attribute String" + attRef.TextString);
                        ed.WriteMessage(str);
                        trans.Commit();
                  }
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message);
            }
            finally
            {
                trans.Dispose();
            }
      }      
    }
}

AttributeCollection attCol = blkRef.AttributeCollection;
对象的当前状态使该操作无效。为什麽??

sailorcwx 发表于 2011-10-21 17:49:11

屏蔽btr.dispose试试

zy19860604 发表于 2011-10-23 16:35:38

还是不行;
还是出现同样的问题。还是谢谢你的回答!

liuxu042 发表于 2011-10-25 16:29:58

解决了吗,把 trans.Commit();放在循环外面试试,我也不是很明白
页: [1]
查看完整版本: 读取属性块出现的问题??