调用Getter后c#属性改变的属性
本文关键字:属性 改变 Getter 调用 | 更新日期: 2023-09-27 18:15:03
下面的代码是我的一个类
的属性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的属性,我希望它为真,这样我就可以对对象进行更改。我甚至明确指定了OpenMode。GetObject中的ForWrite。但是,当我进行如下代码段
所示的更改时PlaceHolder.Visible = false;
它爆炸了。在调用getter后查看变量,可以发现IsWriteEnabled在对象返回后立即从true更改为false。如何保持启用写作?
似乎Transaction和DocumentLock对象负责管理对SubDMesh的写入。这两个对象都在getter的末尾被处理,所以写事务会立即回滚。
尝试在using (tr) using (docLock)
内对SubDMesh进行所有操作(或将tr和doclock包装在另一个一次性类中以使它们存活更长时间)。
在打开交易之前锁定文档,并确保在完成更改SubDMesh后提交交易。
注意:使用Commit,即使你打开一个对象读。处理一个事务大约需要5倍的时间。