以下代码是我的某个类的属性
public SubDMesh PlaceHolder
{
get
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Transaction tr = db.TransactionManager.StartTransaction();
DocumentLock docLock = doc.LockDocument();
using (tr)
using (docLock)
{
return tr.GetObject(IdOfPlaceHolder, OpenMode.ForWrite) as SubDMesh;
}
}
}
SubDMesh是AutoCAD API的一个类,它有一个名为IsWriteEnabled的属性,我希望它是真的,以便我可以对对象进行更改。我甚至在GetObject中明确指定了OpenMode.ForWrite。但是,当我按照下一个代码段进行更改时
PlaceHolder.Visible = false;
它爆炸了。在调用getter之后查看变量会发现IsWriteEnabled在返回对象后立即从true更改为false。如何启用写入?
答案 0 :(得分:1)
似乎Transaction和DocumentLock对象负责管理对SubDMesh的写入。两个对象都放置在getter的末尾,因此您的写入事务会立即回滚。
尝试在using (tr) using (docLock)
内对SubDMesh执行所有操作(或在另一个一次性类中包装tr和doclock以使它们保持更长时间)。
答案 1 :(得分:1)
在您打开交易之前锁定文档 ,并确保在您完成更改SubDMesh后提交您的交易。
注意:即使您打开要读取的对象,也要使用提交。处置交易大约需要5倍。