Unhandled exception при попытке вызова команды по нажатии на кнопку

Автор Тема: Unhandled exception при попытке вызова команды по нажатии на кнопку  (Прочитано 5934 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн ДаниилАвтор темы

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Здравствуйте. Я пытаюсь написать небольшое приложение-плагин для AutoCAD 2012, которое позволит редактировать графические примитивы на чертеже. Графический интерфейс на WPF.

Я сделал Class Library в который добавил UserControl WPF, на него разместил кнопку, по нажатию на которую должна вызываться тестовая команда команда, которая позволяет сменить цвет для выбранных объектов на чертеже:

Код - C# [Выбрать]
  1. [CommandMethod("SelectObjectsOnscreen")]
  2.         public static void SelectObjectsOnscreen()
  3.         {
  4.             acDoc = Application.DocumentManager.MdiActiveDocument;
  5.             acCurDB = acDoc.Database;
  6.  
  7.             using (acTrans = acCurDB.TransactionManager.StartTransaction())
  8.             {
  9.                 PromptSelectionResult acSSPromt = acDoc.Editor.GetSelection();
  10.  
  11.                 if (acSSPromt.Status == PromptStatus.OK)
  12.                 {
  13.                     SelectionSet acSSet = acSSPromt.Value;
  14.  
  15.                     foreach (SelectedObject acSObj in acSSet)
  16.                     {
  17.                         if ( acSObj != null )
  18.                         {
  19.                             MessageBox.Show(acSObj.ObjectId.ToString());
  20.                             acEnt = acTrans.GetObject(acSObj.ObjectId, OpenMode.ForWrite) as Entity;
  21.  
  22.                             if (acEnt != null)
  23.                             {
  24.                                 acEnt.ColorIndex = 3;
  25.                             }
  26.                            
  27.                         }
  28.                     }
  29.  
  30.                     acTrans.Commit();
  31.                 }
  32.             }
  33.         }
  34.  

Если для вызова команды я использую CommandMethod, т.е. вызываю команду "SelectObjectsOnscreen" из командной строки AutoCAD, все работает замечательно:
1. Вызов команды
2. Выбор объектов
3 Enter -> Смена цвета

Однако если я пытаюсь вызвать данную команду по нажатию кнопки, приложение валится со следующей ошибкой:

---------------------------
Аварийное завершение AutoCAD
---------------------------


ФАТАЛЬНАЯ ОШИБКА:  Unhandled e0434352h Exception at de4d606ch


---------------------------
ОК   
---------------------------

При дебаге локализовал место ошибки: acEnt = acTrans.GetObject(acSObj.ObjectId, OpenMode.ForWrite) as Entity

ругается из-за метода ForWrite (пробовал брать объект для чтения ForRead, ошибок не возникало), есть предположение, что документ каким-либо образом может быть защищен от записи.

Соответственно возникли два вопроса:

1. Почему при вызове команды из командной строки метод отработал верно SelectObjectsOnscreen(), а при вызове его из кнопки выдал ошибку?
2. Как решить проблему?

Прошу Вас поделиться опытом, буду очень признателен за помощь.
« Последнее редактирование: 22-11-2015, 22:46:33 от Александр Ривилис »

Отмечено как Решение Даниил 03-02-2015, 15:05:24

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Сразу вопрос: UserControl запускается в модальном режиме? Если нет (или на палитре находится), то необходимо блокировать документ перед работой с ним.
А. Уже ответили
Алексей

Оффлайн ДаниилАвтор темы

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Действительно, блокировка текущего документа решила все проблемы. Благодарю Вас за помощь)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Даниил
Пользуйся пожалуйста кнопкой "Решение" для отметки правильного ответа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение