Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Atomohod от 13-12-2019, 23:03:05

Название: Как сделать блокировку документа вне метода
Отправлено: Atomohod от 13-12-2019, 23:03:05
Здравствуйте!
Запускаю ранее написанные методы(раньше запускал через командную строку - все работало) через кнопку с Palette. Хватаю исключение elockviolation, как я понял это из-за того что у меня не заблокирован документ. Но документ создается внутри каждого вызываемого метода то есть нужно переписать все методы добавив
Код - C# [Выбрать]
  1.   Document doc = Application.DocumentManager.MdiActiveDocument;
  2.             doc.LockDocument();
? Можно как- то избежать правки всех методов и блокировать документ как-нибудь по-иному?
Название: Re: Как сделать блокировку документа вне метода
Отправлено: avc от 13-12-2019, 23:05:17
Во первых, через using
Во вторых, только один раз на все процедуры на самом верхнем уровне вызовов
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Atomohod от 13-12-2019, 23:18:31
Во вторых, только один раз на все процедуры на самом верхнем уровне вызовов
То есть все-таки править каждый метод? Это окажет влияние на команды при запуске из командной строки(нужно сохранить оба варианта вызова- кнопка и командная строка )?
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Александр Ривилис от 13-12-2019, 23:21:16
Это окажет влияние на команды при запуске из командной строки(нужно сохранить оба варианта вызова- кнопка и командная строка )?
Всё будет нормально.
Название: Re: Как сделать блокировку документа вне метода
Отправлено: avc от 13-12-2019, 23:22:45
Нет, не обязательно. Обработку выносите в отдельные методы. В них к документу вообще можно не обращаться - передайте базу данных и используйте везде, хоть вообще в закрытом файле. А блокировку делайте сразу при нажатии кнопок на палитре. Ну да, если 20 кнопок, то 20 блокировок. Но не более того. И кстати, если Автокад игнорирует повторные блокировки блокированного документа, то те API "чье имя не произносим" могут вам и ексепшен вытолкнуть. Так что не злоупотребляйте.
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Atomohod от 13-12-2019, 23:41:17
Спасибо! Как вариант- может лучше на будущее писать async методы и запускать их в отдельных тасках? Или это не поможет?
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Александр Ривилис от 14-12-2019, 00:19:38
Как вариант- может лучше на будущее писать async методы и запускать их в отдельных тасках?
Ни в коем случае!
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Atomohod от 14-12-2019, 00:29:05
Ни в коем случае!
Даже так, а что страшного будет с асинхронным методом? Как быть, если нужно не "морозить" пользовательский интерфейс и выполнять что-то долгое?
Название: Re: Как сделать блокировку документа вне метода
Отправлено: Александр Ривилис от 14-12-2019, 00:31:36
Даже так, а что страшного будет с асинхронным методом?
Обращение к AutoCAD должно быть только из главного потока.
Как быть, если нужно не "морозить" пользовательский интерфейс и выполнять что-то долгое?
Что именно "долгое" имеется в виду? Если что-то не относящееся к AutoCAD API, то можно и в отдельном потоке.