Коллеги!
Честно скажу - где-то я про это читал, но к сожалению не могу теперь найти на просторах интернета где именно, может подскажете.
Проблема следующая - чего-то накодил, все работает нормально, когда команды вызваются из командной строки автокада.
Однако, необходимо, чтобы они вызвались из формы с кнопочками, списками, которые генерятся из СУБД и т.п.
Форму слава богу нарисовал и даже вызываю ее, она показывается, кнопочки нажимаются, списки заполняются, однако, когда на форме нажимаю кнопочку вставить объект в чертеж и вызываю команду этой самой вставки - необходимо точку вставки вместе с объектом выбрать на чертеже и тут вываливается ошибка eLockViolation.
При этом если эту команду вызвать руками например из командной строки или отдельно компильнуть без формы - все замечатльно работает.
Где-то я что-то читал по поводу того, что надо что-то с формой делать и штуки типа Form1.ActiveForm.Show() Form1.ActiveForm.Hide() недостаточно чтобы все нормально заработало, но к сожалению, сейчас не могу найти где именно это было написано с подробностями и как с этим бороться.
Ошибка вываливается на строке (4) в котрой делаю запись в таблицу с блоками.
If sampstatus = "OK" Then
Using myT As Transaction = tm.StartTransaction()
Dim bt As BlockTable = DirectCast(tm.GetObject(db.BlockTableId, OpenMode.ForRead, False), BlockTable)
Dim btr As BlockTableRecord = DirectCast(tm.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False), BlockTableRecord)
btr.AppendEntity(mvb)
tm.AddNewlyCreatedDBObject(mvb, True)
myT.Commit()
End Using
End If
UPD: Нашел где это было
http://forums.autodesk.com/t5/NET/eLockViolation-when-trying-to-draw-from-a-command-on-a-form/td-p/1348038Исправляется путем Lock'а активного документа, перед всем этим безобразием надо написать:
Dim doc1 As Document = Application.DocumentManager.MdiActiveDocument
Dim dl As DocumentLock = doc1.LockDocument
И тогда все заработало.
Стоит оставить эту тему, т.к. с этим часто все кто начинает писать в таблицы через интерфейсные формы сталкивается.