Запуск транзакции из внешнего приложения, запущенного за пределами контекста API, не допускается. не может начать транзакцию.Запуск транзакции из внешнего приложения, запущенного за пределами контекста API, не допускается
ответ
Используя свой магический психические хрустальный шар угадать вы спрашиваете, как избежать этого сообщения об ошибке в вашем Revit/RPS плагин, вот короткие немного дополнительной информации:
- все API вызовы Revit должен произойти внутри «контекста API»
- этот «контекст API» живет в специальной теме
- вы, вероятно, получить доступ к API из другого потока
- это часто случается, когда вы делаете
Form
и позвонить в API одного из события (Button.OnClick
)
Что вы хотите сделать, это выяснить, как вернуться в контекст API для выполнения кода. Есть два основных способа сделать это (если вы уже покинули IExternalCommand.Execute
контекст):
- опрос на работу внутри
Idling
события - использованием
ExternalEvent
Поскольку вы упомянули RevitPythonShell в теги, почему бы вам не проверить, как я использовал external events in my web server example.
- создать
IExternalEventHandler
- реализовать свой метод
Execute
- (метод
Execute
работает в контексте API Revit) - создать
ExternalEvent
(с помощью обработчика событий только что создали) - , когда вам нужно что-то в контексте Revit API, уведомлять о внешнем событии (
my_external_event.Raise()
)
> этот «контекст API» живет в специальном потоке: Это поток пользовательского интерфейса, здесь ничего особенного. > Это часто случается, когда вы делаете форму: Мозаичная форма, потому что модальная не может выйти из контекста API – Maxence
Кроме того, для более подробной информации The Building Coder предоставляет целую группу тем на эту тему: http: //thebuildingcoder.typepad.com/blog/about-the-author.html#5.28 –
Не знаете, что вы здесь просите ... пожалуйста, уточните. –