I am working on an application that uses map to query data, then saves the data to a file, and repeat. It works flawlessly when I use a commandmethod with commandflags.session, But, when I try to run the same code from a form button, I get "drawing is busy". The command from the form button ignores the commandmethod and the commandflags. I am guessing that "sendstringtoexecute" would work, but I would prefer to not do it that way.
What am I missing? Is there another way to lock the session?
Here is what I am trying to do.
drawing1 is open and the user presses the button
data is queried and saved as 1.dwg
close and discard drawing1
open a new doc drawing2
data is queried and saved as 2.dwg
close and discard drawing2
open a new doc drawing3
....
Solved! Go to Solution.
Solved by Alexander.Rivilis. Go to Solution.
You can try using DocumentCollection.ExecuteInApplicationContext method.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
That's even better - thank you. Starting at an empty drawing1, the user presses the button, and the queries start in drawing2. When it's finished, the user is back at an empty drawing1.
Good idea - sorry. It took a bit of digging and I was in a rush. Thanks again Alexander and tony t (again and again...).
<CommandMethod("q19")> _ Sub q_19() Dim acdocmgr As acapp.DocumentCollection = acapp.Application.DocumentManager 'assume drawing1 is active - it does not matter acdocmgr.ExecuteInApplicationContext(AddressOf testsub, Nothing) End Sub Private Sub testsub(ByVal data As Object) 'in this example data is not used Dim cmddiavalue As Integer = CInt(acapp.Application.GetSystemVariable("CMDDIA")) acapp.Application.SetSystemVariable("CMDDIA", 0) Dim acdocmgr As acapp.DocumentCollection = acapp.Application.DocumentManager Dim acdoc As acapp.Document = acdocmgr.MdiActiveDocument Dim templatepath As String = "map2diso.dwt" acdoc = acdocmgr.Add(templatepath) acdocmgr.MdiActiveDocument = acdoc 'drawing2 is now active Using acdoclock As acapp.DocumentLock = acdoc.LockDocument Dim currentobjs As New ObjectIdCollection() 'query and save End Using acdoc.CloseAndDiscard() acdoc = acdocmgr.Add(templatepath) acdocmgr.MdiActiveDocument = acdoc 'drawing3 Using acdoclock As acapp.DocumentLock = acdoc.LockDocument Dim currentobjs As New ObjectIdCollection() 'query and save End Using acdoc.CloseAndDiscard() acapp.Application.SetSystemVariable("CMDDIA", cmddiavalue) Autodesk.AutoCAD.Internal.Utils.PostCommandPrompt() 'return to drawing1 or whatever doc was before End Sub
Thanks for sharing your code
Regards,
Oleg
Can't find what you're looking for? Ask the community or share your knowledge.