在Getter调用之后更改C#属性的属性

时间:2015-09-29 21:37:07

标签: c# autocad

以下代码是我的某个类的属性

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。如何启用写入?

2 个答案:

答案 0 :(得分:1)

似乎Transaction和DocumentLock对象负责管理对SubDMesh的写入。两个对象都放置在getter的末尾,因此您的写入事务会立即回滚。

尝试在using (tr) using (docLock)内对SubDMesh执行所有操作(或在另一个一次性类中包装tr和doclock以使它们保持更长时间)。

答案 1 :(得分:1)

在您打开交易之前锁定文档 ,并确保在您完成更改SubDMesh后提交您的交易。

注意:即使您打开要读取的对象,也要使用提交。处置交易大约需要5倍。