关闭 DST 错误
大家好,我修改了一个在 http://through-the-interface.typepad.com/through_the_interface/2010/05/populating-a-tree-view-inside-autocad-with-sheet-set-data-using-net-part-2.html 找到的代码,我在事情的顺序上遇到了麻烦,尽管代码做了它应该做的事情。 [写到工作表视图]它总是给我错误 出现“一个”文件仍然打开,不确定它是TEXT文件还是DST文件仍然是“CommandInProgress”。通过文本文件,我的意思是存储信息的.txt文件。我之前已经启动并运行了它,但不同之处在于,在它是一个项目之前,一次调用SheetViewWrite,现在我合并了一段时间来读取一个外部文件,调用SheetViewWrite一次。我成功地用XREFATTACH做了同样的事情,但是我没有得到任何错误。猜猜这是DST吗?现在已经呆了2天了,没有运气。以下是修改后的代码us Autodesk.AutoCAD.ApplicationServices;。使用Autodesk.AutoCAD.EditorInput;。
使用Autodesk.AutoCAD.Runtime;。
使用ACSMCOMPONENTS21Lib;。
使用系统;。
。
。
命名空间 MyApplication。
{。
公共类命令。
{。
。
。
。
public void PopulateSheetView()。
{。
Document acDoc = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument;。
。
。
字符串 ssFilePath = userInput(“\n输入工作表集名称: ”);。
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;。
。
。
获取工作表集管理器。
AcSmSheetSetMgr mgr = new AcSmSheetSetMgr();。
。
。
创建一个新的工作表集数据库。
AcSmDatabase db = new AcSmDatabase();。
。
。
尝试加载默认的 DST 文件...。
尝试。
{。
db = mgr.OpenDatabase(ssFilePath, true);。
}。
catch (System.Exception ex)。
{。
编辑,WriteMessage(例如ToString());。
返回;。
}。
。
。
锁定数据库以进行处理。
分贝,LockDb(db);。
。
。
AcSmSheetSet ss = db.GetSheetSet();。
PromptStringOptions SSVsource = new PromptStringOptions(“Enter Source: ”);。
SSVsource.AllowSpaces = true;。
PromptResult fileRes = acDoc.Editor.GetString(SSVsource);。
。
。
string svfilePath = (fileRes.StringResult);。
using (System.IO.StreamReader reader = new System.IO.StreamReader(svfilePath))。
。
。
{。
而 (!读者.EndOfStream)。
{。
字符串 textLine2 = 读取器,ReadLine();。
string componentName = textLine2.Split(',');。
string componentValue = textLine2.Split(',');。
。
。
尝试。
{。
ProcessItems(db, false, componentValue, componentName);。
}。
捕获 { }。
。
。
使用工作表枚举器处理内容。
。
。
尝试。
{。
ProcessEnumerator(ss.GetSheetEnumerator(), true, componentValue, componentName);。
}。
捕获 { }。
}。
}。
。
。
分贝,UnlockDb(db, true);。
经理,关闭(数据库);。
。
。
acDoc.Dispose();。
}谢谢。
**** Hidden Message ***** 很奇怪,我所做的只是注释掉一行,它起作用了,错误消失了
acDoc.Dispose();
但是我知道我应该实现一个dispose对吗?否则会消耗大量内存?
FWIW,正确的处置方式是什么?或者我甚至应该处置acDoc吗?
提前谢谢你 嗨,
你不应该处理文档,AutoCAD会处理的。
使用AutoCAD API,您必须处理事务、锁定的文档和每个不由事务处理的dbobject,例如:用ObjectId打开。Open()方法或任何未添加到事务中的新dbobject(使用new或生成DBObjectCollection作为Explode()的方法创建)(当添加到事务中时,此事务在释放自身时会小心地释放对象)。
谢谢你提供的信息,吉尔,感谢你抽出时间。
页:
[1]