运行一段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:30 编辑
1,若acDoc.LockDocument()之后, acDoc.LockDocument.Dispose() 这句之前报异常,解锁将没有执行.
2,一般的,是先锁定文件,再开始事务
3,一般的,若不涉外,不必锁定文件
另,acCurDb.Dispose()这一句你明白是什么意思吗? 我的是非模式窗体,不锁定不能操作。谢谢你的解释。最后一句我还真不理解,望求教! 可以这样
using (DocumentLock docLock = ThisDrawing.ActiveDocument.LockDocument())
{
//---
///
}
页:
[1]