【发布时间】:2018-09-07 03:44:32
【问题描述】:
我有一个外部命令来创建大约 40 个(甚至更多)通用模型 在 Revit 中。我想让Revit按照这个流程异步运行命令来加快进程:
加载命令 -> 运行命令 -> 加载族 -> 异步生成族实例 -> 结束命令。
我已经阅读了一些关于制作无模式对话框以解决问题的想法,但这不是我所需要的。我该怎么做?
【问题讨论】:
标签: multithreading asynchronous revit-api revit
我有一个外部命令来创建大约 40 个(甚至更多)通用模型 在 Revit 中。我想让Revit按照这个流程异步运行命令来加快进程:
加载命令 -> 运行命令 -> 加载族 -> 异步生成族实例 -> 结束命令。
我已经阅读了一些关于制作无模式对话框以解决问题的想法,但这不是我所需要的。我该怎么做?
【问题讨论】:
标签: multithreading asynchronous revit-api revit
Meiki 完全正确。 Revit API 只能在有效的 Revit API 上下文中使用,并且此类上下文仅由 Revit 事件提供。但是,您可以实现外部事件并从外部触发该事件以获得对有效 Revit API 上下文的访问。由 The Building Coder 在Idling and External Events for Modeless Access and Driving Revit from Outside 的主题组中提供的许多解决方案对此进行了详细讨论。
另一种方法可能是使用DocumentOpened Event。您可以使用它来触发您想要的执行流程。
第三种但不受支持的方法可能是使用日志文件,如 IFC Import and Conversion Journal Script。
我会开始阅读主题组中列出的众多解决方案,最终可能会使用外部事件。
祝你好运,玩得开心!
【讨论】:
由于事务,您不能异步运行外部命令来创建(或修改)某些内容,请记住 Revit 不支持异步方法或方法。你能准确描述一下你要做什么吗?也许还有另一种方法。
【讨论】:
根据文档:
Autodesk Revit API 仅支持单线程访问。这意味着您的 API 应用程序必须在主线程中执行所有 Autodesk Revit API 调用(由 Autodesk Revit 进程在各个 API 入口点调用),并且您的 API 应用程序无法维护其他线程中的操作并期望它们能够随时调用 Autodesk Revit。
但是,我相信您可以创建一个外部 API 并从您的命令中使用它。
【讨论】: