pBe 发表于 2016-9-12 05:02:39

关闭 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 *****

pBe 发表于 2016-9-12 08:00:01

很奇怪,我所做的只是注释掉一行,它起作用了,错误消失了
acDoc.Dispose();
但是我知道我应该实现一个dispose对吗?否则会消耗大量内存?
FWIW,正确的处置方式是什么?或者我甚至应该处置acDoc吗?
提前谢谢你

gile 发表于 2016-9-12 08:39:31

嗨,
你不应该处理文档,AutoCAD会处理的。
使用AutoCAD API,您必须处理事务、锁定的文档和每个不由事务处理的dbobject,例如:用ObjectId打开。Open()方法或任何未添加到事务中的新dbobject(使用new或生成DBObjectCollection作为Explode()的方法创建)(当添加到事务中时,此事务在释放自身时会小心地释放对象)。

pBe 发表于 2016-9-12 08:48:37


谢谢你提供的信息,吉尔,感谢你抽出时间。
页: [1]
查看完整版本: 关闭 DST 错误