lup 发表于 2016-5-20 04:22:04

Teigha eNotOpenForRead

嗨,我目前正在为bricscad v16翻译autocad插件,现在访问DBObject属性时遇到问题。方法事务,GetObject 返回一个对象,但在打印 .handle 时会出现错误 eNotOpenForRead。在autocad中,它工作正常。我不知道,怎么了。im using Bricsys SDK v15.Document document = Bricscad.ApplicationServices.Application.DocumentManager.MdiActiveDocument;。
数据库数据库 = 文档,数据库;。
DBObject autoCadDatabaseObject = null;。
使用 (事务事务 = 数据库,TransactionManager.StartTransaction())。
{。
使用 (DocumentLock documentLock = document,LockDocument())。
{。
autoCadDatabaseObject = transaction,GetObject(pObjectId, OpenMode.ForRead);。
交易,Commit();。
if (autoCadDatabaseObject == null)。
{。
记录,Debug(“object is null”);。
}else{。
记录,Debug(“object is not null: ” + autoCadDatabaseObject.GetType().ToString());工作正常。
记录,Debug(“the handle: ” + autoCadDatabaseObject.Handle.ToString());Teigha.Runtime.Exception: eNotOpenForRead at Teigha.DatabaseServices.DBObject.get_Handle()。
}。
}。
}。

**** Hidden Message *****

lup 发表于 2016-5-20 04:38:47

在我看来,“transaction.Commit();”将是事务“使用”块中的最后一个代码字符串。

Bryco 发表于 2016-5-20 05:32:01

非常感谢你的回答。这使我更进一步
但为什么只能在事务中访问属性
我有一个“GetAutoAddBobObjectByObjectId”方法,它在autocad中运行良好
我现在真的需要重构代码吗?

lup 发表于 2016-5-20 05:59:23

如果您通过事务机制获取对象,那么您必须在事务范围内处理它,然后才能访问或提交事务。但是您可以在没有事务或通过事务仿真的情况下获取对象。
您可以在此处阅读有关它的一些信息(有俄文文本,但您可以阅读源sode):
http://bushman-andrey.blogspot.ru/2013/01/database-autocad.html
http://bushman-andrey.blogspot.ru/2014/09/blog-post.html

lup 发表于 2016-5-20 19:25:11

是否pObjectId.Handle.ToString();打印没有任何事务?(可能仍然需要文档锁)

Atook 发表于 2016-5-21 03:04:40


因此,在我看来,在这种情况下,文档锁定是不必要的。

lup 发表于 2016-5-23 07:39:20

翻译错误代码(429):请求 QPS 超过限制。

lup 发表于 2016-5-24 02:58:08

翻译错误代码(429):请求 QPS 超过限制。

lup 发表于 2016-5-24 04:38:14


我的生活朋友的故事,谢谢你的笑声!

Bryco 发表于 2016-5-24 12:17:33

翻译错误代码(429):请求 QPS 超过限制。
页: [1]
查看完整版本: Teigha eNotOpenForRead