2015-07-18 6 views
-1

Запуск транзакции из внешнего приложения, запущенного за пределами контекста API, не допускается. не может начать транзакцию.Запуск транзакции из внешнего приложения, запущенного за пределами контекста API, не допускается

+1

Не знаете, что вы здесь просите ... пожалуйста, уточните. –

ответ

7

Используя свой магический психические хрустальный шар угадать вы спрашиваете, как избежать этого сообщения об ошибке в вашем 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())
+0

> этот «контекст API» живет в специальном потоке: Это поток пользовательского интерфейса, здесь ничего особенного. > Это часто случается, когда вы делаете форму: Мозаичная форма, потому что модальная не может выйти из контекста API – Maxence

+1

Кроме того, для более подробной информации The Building Coder предоставляет целую группу тем на эту тему: http: //thebuildingcoder.typepad.com/blog/about-the-author.html#5.28 –