Запуск транзакции из внешнего приложения, работающего вне контекста API, не допускается
Запуск транзакции из внешнего приложения, работающего вне контекста API, не допускается. не может начать транзакцию.
1 ответ
Используя мой волшебный хрустальный шар, чтобы догадаться, что вы спрашиваете, как избежать появления этого сообщения об ошибке в ваших плагинах Revit / RPS, вот небольшая дополнительная информация:
- все вызовы Revit API должны происходить внутри "контекста API"
- этот "контекст API" живет в специальном потоке
- вы, вероятно, обращаетесь к API из другого потока
- это часто случается, когда вы делаете
Form
и вызвать в API от одного из событий (Button.OnClick
)
Что вы хотите сделать, так это выяснить, как вернуться в контекст API для выполнения вашего кода. Есть два основных способа сделать это (при условии, что вы уже оставили IExternalCommand.Execute
контекст):
- опрос на рабочие места внутри
Idling
событие - используя
ExternalEvent
Поскольку вы упомянули RevitPythonShell в тегах, почему бы вам не проверить, как я использовал внешние события в моем примере веб-сервера.
- создать
IExternalEventHandler
- реализовать его
Execute
метод - (
Execute
метод выполняется в контексте Revit API) - создать
ExternalEvent
(используя только что созданный обработчик событий) - когда вам нужно что-то сделать в контексте Revit API, уведомите внешнее событие (
my_external_event.Raise()
)