arthurfy 发表于 2012-2-26 10:24:58

运行一段vb代码后,cad保存时提示“文档 Drawing1.dwg 正在执行命令

大家好,我在cad里运行下面的代码生成一个属性块,生成后,cad保存时提示“文档 Drawing1.dwg 正在执行命令。
按回车键取消或 [重试(R)]: ”
   '' 获得当前文档和数据库   Get the current document and database
      Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
      Dim acCurDb As Database = acDoc.Database

      ''启动一个事务   Start a transaction
      Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

            '' 以只读方式打开块表   Open the Block table for read
            Dim acBlkTbl As BlockTable
            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                       OpenMode.ForRead)

            '文档加锁
            acDoc.LockDocument()


            '' 以写方式打开模型空间块表记录   Open the Block table record Model space for write
            Dim acBlkTblRec As BlockTableRecord
            acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                          OpenMode.ForWrite)

            ''创建属性块    Create a single-line text object

            Dim attdef As AttributeDefinition = New AttributeDefinition()
            attdef.Position = New Point3d(0.0, 0.0, 0.0)
            attdef.Height = 8.0 '//设置文字高度
            attdef.Rotation = 0.0 '//设置文字旋转角度
            attdef.HorizontalMode = TextHorizontalMode.TextMid '//设置水平对齐方式
            attdef.VerticalMode = TextVerticalMode.TextVerticalMid '//设置垂直对齐方式
            attdef.Prompt = "Room Number:" '//设置属性提示
            attdef.TextString = "0000" '//设置属性的缺省值
            attdef.Tag = "NUMBER" '//设置属性标签
            attdef.Invisible = False '//设置不可见选项为假
            attdef.Verifiable = False '//设置验证方式为假
            attdef.Preset = False '//设置预置方式为假
            attdef.Constant = False '//设置常数方式为假
            acBlkTblRec.AppendEntity(attdef)
            acTrans.AddNewlyCreatedDBObject(attdef, True)

            '解锁文档
            acDoc.LockDocument.Dispose()

            ''保存更改并销毁事务   Save the changes and dispose of the transaction
            acTrans.Commit()
      End Using

      acDoc = Nothing
      acCurDb.Dispose()
请问是什么原因,我文档加锁后也解锁了啊

sieben 发表于 2012-2-26 13:25:55

本帖最后由 sieben 于 2012-2-26 13:30 编辑

1,若acDoc.LockDocument()之后, acDoc.LockDocument.Dispose() 这句之前报异常,解锁将没有执行.
2,一般的,是先锁定文件,再开始事务
3,一般的,若不涉外,不必锁定文件

另,acCurDb.Dispose()这一句你明白是什么意思吗?

arthurfy 发表于 2012-2-26 21:20:37

我的是非模式窗体,不锁定不能操作。谢谢你的解释。最后一句我还真不理解,望求教!

yxr_MJTD 发表于 2012-3-19 16:08:01

可以这样
using (DocumentLock docLock = ThisDrawing.ActiveDocument.LockDocument())
{
    //---
///

}
页: [1]
查看完整版本: 运行一段vb代码后,cad保存时提示“文档 Drawing1.dwg 正在执行命令