Запуск транзакции из внешнего приложения, работающего вне контекста 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())
Другие вопросы по тегам