Добрый день. У меня есть описание события, его обработчик и подписка на событие.
Внутрь обработчика я поместил код, который будет изменять документ при триггере самого события. Однако, код не срабатывает.
Мне объяснили, что проблема в потоках. Ревит не поддерживает многопоточность и код не выполняется из-за отсутствия свободного потока. Предложили запускать событие Idling во время совершения действия. Однако, я не знаю каким образом поместить подписку и отписку одного события внутрь другого события.
Есть ли какие нибудь способы заставить триггер события делать изменения внутри документа (с помощью транзакций или без)?
Еще я думал создать отдельно public result класс и запустить его выполнение внутри этого события, но не могу в обработчик передать commandData.
Обработчик события:
private void OnDocumentChanged(object sender, DocumentChangedEventArgs e)
{
Document doc = e.GetDocument();
IndependentTag newTag = FindAdding(doc, e.GetAddedElementIds());
if (null != newTag)
{
//здесь должен быть код
}
}
Класс для выполнения:
public Result ses(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
View vid = doc.ActiveView;
//код изменения документа
return Result.Succeeded;
}