Работа с документом внутри обработки события

Автор Тема: Работа с документом внутри обработки события  (Прочитано 2753 раз)

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

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

  • ADN OPEN
  • Сообщений: 13
  • Карма: 0
Добрый день. У меня есть описание события, его обработчик и подписка на событие.
Внутрь обработчика я поместил код, который будет изменять документ при триггере самого события. Однако, код не срабатывает.
Мне объяснили, что проблема в потоках. Ревит не поддерживает многопоточность и код не выполняется из-за отсутствия свободного потока. Предложили запускать событие Idling во время совершения действия. Однако, я не знаю каким образом поместить подписку и отписку одного события внутрь другого события.
Есть ли какие нибудь способы заставить триггер события делать изменения внутри документа (с помощью транзакций или без)?

Еще я думал создать отдельно public result класс и запустить его выполнение внутри этого события, но не могу в обработчик передать commandData.

Обработчик события:
Код - C# [Выбрать]
  1. private void OnDocumentChanged(object sender, DocumentChangedEventArgs e)
  2.         {        
  3.             Document doc = e.GetDocument();
  4.             IndependentTag newTag = FindAdding(doc, e.GetAddedElementIds());
  5.  
  6.             if (null != newTag)
  7.             {
  8.                 //здесь должен быть код
  9.             }
  10.         }

Класс для выполнения:
Код - C# [Выбрать]
  1.  public Result ses(ExternalCommandData commandData, ref string message, ElementSet elements)
  2.         {
  3.             UIApplication uiApp = commandData.Application;
  4.             Document doc = uiApp.ActiveUIDocument.Document;
  5.             View vid = doc.ActiveView;
  6.             //код изменения документа
  7.             return Result.Succeeded;
  8.         }
  9.  

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Событие OnDocumentChanged является read-only, тут внесение изменений в документы запрещено.

То, чего Вы хотите, реализуется с помощью Dynamic Model Updater, посмотрите примеры в SDK / сети, их достаточно, если останутся вопросы - пишите в этой или новой теме.

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

  • ADN OPEN
  • Сообщений: 13
  • Карма: 0
Вот оно что. Значит буду разбирать DMU

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
На всякий случай оставлю тут ссылочку на статью DocumentChanged VS Dynamic Model Updater