CAD二次开发StartTransaction、StartOpenCloseTransaction

在C#的CAD二次开发中,StartTransaction和StartOpenCloseTransaction都是用于启动一个新事务的方法,它们的具体作用和用法如下:

  • StartTransaction
    StartTransaction是用于启动一个新事务的方法,它是在图形数据库上下文中调用的。使用该方法可以确保在对数据库进行读写操作时,对其进行适当的锁定并避免数据冲突。

例如,以下代码演示了如何在C#中使用StartTransaction方法来创建一个新的事务,并在其中修改数据库中的实体:

using (Transaction tr = db.TransactionManager.StartTransaction())
{
    // 获取当前文档的块表
    BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
    
    // 获取块表记录
    BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
    
    // 创建一个新的直线对象
    Line line = new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0));
    
    // 将直线对象添加到块表记录中
    btr.AppendEntity(line);
    
    // 在事务完成之前将新的实体添加到数据库中
    tr.AddNewlyCreatedDBObject(line, true);
    
    // 提交事务
    tr.Commit();
}

在这个代码示例中,在Transaction块中启动了一个新的事务,并对数据库中的实体进行了修改。在事务完成之前,通过调用AddNewlyCreatedDBObject方法将新的实体添加到数据库中。最后,通过调用Commit方法来提交事务。

  • StartOpenCloseTransaction
    StartOpenCloseTransaction也是用于启动一个新事务的方法,但是它的使用场景与StartTransaction有所不同。该方法主要用于处理文档的打开和关闭操作,例如在打开或关闭文档之前,需要执行某些操作的情况。

例如,以下代码演示了如何在C#中使用StartOpenCloseTransaction方法来创建一个新的事务,并在其中打开和关闭文档:

using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
{
    // 在打开文档之前执行某些操作
    tr.StartOpenCloseSession();
    
    // 打开文档
    Document doc = Application.DocumentManager.Open(docName, true);
    
    // 在关闭文档之前执行某些操作
    tr.Commit();
    tr.EndOpenCloseSession();
    
    // 关闭文档
    doc.CloseAndDiscard();
}

在这个代码示例中,在Transaction块中启动了一个新的事务,并在其中打开和关闭了文档。在打开文档之前,通过调用StartOpenCloseSession方法来执行某些操作。在关闭文档之前,通过调用Commit方法来提交事务,并通过调用EndOpenCloseSession方法来结束打开关闭会话。

EndOpenCloseSession方法的作用是通知AutoCAD打开关闭会话已经结束,并释放相关资源。在StartOpenCloseSession方法中,我们调用了Document.LockDocument方法来锁定文档,防止其他线程同时进行对文档的操作,因此在事务提交或回滚后,我们必须通过调用EndOpenCloseSession方法来释放该锁定,以便其他线程可以对文档进行操作。


总之,在使用StartOpenCloseTransaction方法时,必须遵循以下步骤:

  1. 在事务中调用StartOpenCloseSession方法来执行任何必要的操作。
  2. 在事务中调用Commit方法来提交事务。
  3. 在事务中调用EndOpenCloseSession方法来结束打开关闭会话,并释放相关资源。

ps: 在使用StartOpenCloseTransaction方法时,可以在事务中调用StartOpenCloseSession方法来执行任何必要的操作。这里的“必要的操作”指的是在打开和关闭文档之前需要执行的一些操作,例如设置文档的一些属性、加载特定的插件或应用程序等等。这些操作通常与文档本身的内容无关,而是与操作文档的环境和设置相关。


在StartOpenCloseSession方法中执行的任何操作都将在事务提交或回滚之前完成,以确保文档在打开或关闭时处于正确的状态。例如,在StartOpenCloseSession方法中,可以使用Document.LockDocument方法来锁定文档,以确保在事务期间不会有其他线程对文档进行更改。

需要注意的是,在调用StartOpenCloseSession方法之后,必须在事务中调用Commit方法来提交事务,以便在关闭文档之前完成所有必要的操作。如果在提交事务之前关闭文档,则可能会导致文档被永久锁定,从而无法再次打开。

另外,StartOpenCloseTransaction方法在启动事务时会将文档锁定,并且只有在事务提交或回滚后才会解锁。这意味着,在使用StartOpenCloseTransaction方法时,必须确保在操作期间不会关闭文档,否则可能会导致文档被永久锁定,从而无法再次打开。

因此,当需要在打开和关闭文档之前执行某些操作时,应使用StartOpenCloseTransaction方法,而在其他情况下则应使用StartTransaction方法。

你可能感兴趣的:(Cad二次开发.NET笔记,c#)