下面的代码是我的一个类的属性
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 的属性,我希望该属性为 true,以便可以对对象进行更改。我什至在 GetObject 中显式指定 OpenMode.ForWrite。但是,当我像下一个代码段那样进行更改时
PlaceHolder.Visible = false;
它爆炸了。查看调用 getter 后的变量可以发现,在返回对象后,IsWriteEnabled 立即从 true 更改为 false。如何保持书写功能?
最佳答案
看起来 Transaction 和 DocumentLock 对象负责管理对 SubDMesh 的写入。这两个对象都在 getter 的末尾处理,因此您的写入事务会立即回滚。
尝试在 using (tr) using (docLock)
中对 SubDMesh 执行所有操作(或者将 tr 和 doclock 包装在另一个一次性类中,以使它们保持更长时间的存活时间)。
关于c# - C# 属性的属性在 Getter 调用后发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854196/