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

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 17-02-2021, 15:05:47

Название: Почему возникает Exception: 'eLockViolation'
Отправлено: Борис_С от 17-02-2021, 15:05:47
Всем доброго дня!
Столкнулся с такой проблемой. Перед закрытием пользовательской формы я убираю все подчеркивания в тексте (вызываю метод UnSelectItem).
Все это прекрасно работает, если до закрытия формы не вызывается другая команда.
Если же перед закрытием формы вызвать другую команду, то на операторе
Entity en = acTrans.GetObject(selPrevDocInf.ObjId, OpenMode.ForWrite) as Entity; возникает исключение
Autodesk.AutoCAD.Runtime.Exception: 'eLockViolation'
Вот код:
Код - C# [Выбрать]
  1.         public static void UnSelectItem()
  2.         {
  3.             if (selPrevDocInf == null) return;
  4.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.
  5.                 MdiActiveDocument;
  6.             Database acCurDb = acDoc.Database;
  7.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  8.             {
  9.                 Entity en = acTrans.GetObject(selPrevDocInf.ObjId, OpenMode.ForWrite) as Entity;
  10.                 if (selPrevDocInf.dt == DataType.DBText)
  11.                 {
  12.                     DBText dbText = (DBText)en;
  13.                     dbText.TextString = selPrevDocInf.text;
  14.                 }
  15.                 acTrans.Commit();
  16.             }
  17.             selPrevDocInf = null;
  18.         }
  19.  
  20.         [CommandMethod("NCS_HLINK", CommandFlags.UsePickSet)]
  21.         public static void CmdSetLink()
  22.         {
  23.             try
  24.             {
  25.                  if (fCheckRefDialog != null) return;
  26.             }
  27.             catch (System.Exception e)
  28.             {
  29.                 ShowMessage(e);
  30.             }
  31.         }
  32.  

fCheckRefDialog - ссылка на пользовательскую форму.
Название: Re: Почему возникает Exception: 'eLockViolation'
Отправлено: Александр Ривилис от 17-02-2021, 15:45:47
Потому что работаешь в контексте приложения и не блокируешь документ.
Название: Re: Почему возникает Exception: 'eLockViolation'
Отправлено: Александр Ривилис от 17-02-2021, 16:09:46
Ищи примеры на форуме по контексту LockDocument
Название: Re: Почему возникает Exception: 'eLockViolation'
Отправлено: Lemieux от 17-02-2021, 17:21:55
Что интересно с этим eLockViolation. Было у меня 2 проекта, всё работало отлично, но как только я решил выделить из них общие модули в отдельный проект, то сразу стал вылетать eLockViolation :))
Название: Re: Почему возникает Exception: 'eLockViolation'
Отправлено: Александр Ривилис от 17-02-2021, 17:24:12
Lemieux,
Видать плохо выделял...
Название: Re: Почему возникает Exception: 'eLockViolation'
Отправлено: Борис_С от 17-02-2021, 18:15:47
Спасибо. Все работает.