【问题标题】:Starting a transaction from an external application running outside of API context is not allowed不允许从在 API 上下文之外运行的外部应用程序启动事务
【发布时间】:2015-08-13 22:56:04
【问题描述】:

不允许从在 API 上下文之外运行的外部应用程序启动事务。 无法开始交易。

【问题讨论】:

  • 不知道你在这里问什么...请详细说明。

标签: revit revit-api revitpythonshell


【解决方案1】:

使用我的魔法通灵水晶球猜测您是在询问如何避免在您的 Revit / RPS 插件中收到此错误消息,这里有一些额外的信息:

  • 所有 Revit API 调用都应在“API 上下文”内进行
  • 这个“API 上下文”存在于一个特殊的线程中
  • 您可能正在从另一个线程访问 API
  • 当您发出 Form 并从其中一个事件 (Button.OnClick) 调用 API 时,通常会发生这种情况

您要做的是弄清楚如何返回 API 上下文以执行您的代码。有两种主要方法可以做到这一点(假设您已经离开了IExternalCommand.Execute 上下文):

  • Idling 事件中轮询作业
  • 使用ExternalEvent

既然你在标签里提到了RevitPythonShell,不如看看我是怎么用external events in my web server example的。

  • 创建一个IExternalEventHandler
  • 实现其Execute 方法
  • Execute 方法在 Revit API 上下文中运行)
  • 创建一个ExternalEvent(使用刚刚创建的事件处理程序)
  • 当您需要在 Revit API 上下文中执行某些操作时,通知外部事件 (my_external_event.Raise())

【讨论】:

  • > 这个“API 上下文”存在于一个特殊的线程中:它是 UI 线程,这里没什么特别的。 > 这经常发生在您制作表单时:无模式表单,因为有模式的表单无法退出 API 上下文
  • 此外,有关更多详细信息,The Building Coder 提供了有关此主题的完整主题组:thebuildingcoder.typepad.com/blog/about-the-author.html#5.28
猜你喜欢
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多