c# - C# 属性的属性在 Getter 调用后发生变化

标签 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 的属性,我希望该属性为 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/

相关文章:

c# - 返回匿名类型列表的方法使用什么返回类型?

c# - 创建布局和逻辑 AutoCAD 插件对话框

vba - 一个更好的 Autocad VBA 编辑器

c# - AutoMapper 子对象中没有前缀名称的展平

autocad - 如何处理dwg文件

layout - Autocad - 自动更新 lisp 生成的字段(布局计数器)

用于 CAD/AutoCAD 文件的 Javascript/canvas 渲染器

c# - 如何将异步 lambda 与 SelectMany 一起使用?

c# - 使用 SqlTransaction 处理数千条 SqlCommand 导致内存异常

c# - 插入 SQL Server 数据库 ASP.net