乐筑天下

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

关闭 DST 错误

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2016-9-12 05:02:39 | 显示全部楼层 |阅读模式
大家好,我修改了一个在 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。
{。
公共类命令。
{。


[CommandMethod(“SheetViewWrite”)]。
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(',')[2];。
string componentValue = textLine2.Split(',')[3];。


尝试。
{。
ProcessItems(db, false, componentValue, componentName);。
}。
捕获 { }。


使用工作表枚举器处理内容。


尝试。
{。
ProcessEnumerator(ss.GetSheetEnumerator(), true, componentValue, componentName);。
}。
捕获 { }。
}。
}。


分贝,UnlockDb(db, true);。
经理,关闭(数据库);。


acDoc.Dispose();。
}谢谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2016-9-12 08:00:01 | 显示全部楼层
很奇怪,我所做的只是注释掉一行,它起作用了,错误消失了
  1. acDoc.Dispose();

但是我知道我应该实现一个dispose对吗?否则会消耗大量内存?
FWIW,正确的处置方式是什么?或者我甚至应该处置acDoc吗?
提前谢谢你
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2016-9-12 08:39:31 | 显示全部楼层
嗨,
你不应该处理文档,AutoCAD会处理的。
使用AutoCAD API,您必须处理事务、锁定的文档和每个不由事务处理的dbobject,例如:用ObjectId打开。Open()方法或任何未添加到事务中的新dbobject(使用new或生成DBObjectCollection作为Explode()的方法创建)(当添加到事务中时,此事务在释放自身时会小心地释放对象)。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2016-9-12 08:48:37 | 显示全部楼层

谢谢你提供的信息,吉尔,感谢你抽出时间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 16:31 , Processed in 0.275348 second(s), 60 queries .

© 2020-2025 乐筑天下

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