我正在编写AutoCAD插件。我使用事务来获取一些对象,我想出了一个问题 - 我是否需要关闭(Dispose)通过事务收到的对象?
在文档中写道,当调用Commit()方法时,事务将关闭通过事务接收的每个对象。
void Commit() - 此函数提交在事务期间打开的所有DBObject中所做的更改,然后关闭它们。
但是当我不打电话给这种方法时会发生什么?例如,我只使用事务来打开一个对象并接收它的图层名称。如下所示:
Database hostapp_workdb = HostApplicationServices.WorkingDatabase;
using ( Application.DocumentManager.MdiActiveDocument.LockDocument() )
using ( Transaction transaction = hostapp_workdb.TransactionManager.StartTransaction() )
{
Entity entity = transaction.GetObject(objectId, OpenMode.ForRead) as Entity;
if ( entity != null )
layer = entity.Layer;
}
正如您所看到的,我在这里不会调用Commit()。在这种情况下会发生什么?该实体是否会被关闭(因为交易使用它必须被处置,所以我认为它必须关闭所有对象。但我还没有在文档中找到任何确认,所以这只是我的假设)。
也许我需要这样做:
ObjectId objectId = new ObjectId();
string layer = string.Empty;
Database hostapp_workdb = HostApplicationServices.WorkingDatabase;
using ( Application.DocumentManager.MdiActiveDocument.LockDocument() )
using ( Transaction transaction = hostapp_workdb.TransactionManager.StartTransaction() )
{
using ( Entity entity = transaction.GetObject(objectId, OpenMode.ForRead) as Entity )
{
if ( entity != null )
layer = entity.Layer;
}
}
鼓励官方消息来源链接。
谢谢。