【问题标题】:How to call Lisp functions Asynchronously?如何异步调用 Lisp 函数?
【发布时间】:2021-10-15 02:51:24
【问题描述】:

我目前有一个 .Net C# 函数,它使用 Application.Invoke()(参见 [AutoDesk])调用结果缓冲区并将其传递给 lisp 函数。我调用的 lisp 函数既不是 AutoCAD 原生函数,也不是 ARX/.Net 函数,所以我不能使用 Editor.Command/Editor.CommandAsync 方法,但 lisp 代码确实在函数中调用了 AutoCAD 命令。有没有办法使用Invoke() 或其他方法来调用此函数,而不会产生可怕的AutoCAD command rejected: ... 错误?

【问题讨论】:

  • 您可以将同步调用包装在 Task.Run 中。不确定这是否是最好的主意。

标签: c# .net autocad autocad-plugin autolisp


【解决方案1】:

这是不可能的。

AutoLisp 引擎仅是同步的。您可以使用 Lisp 在 ARX/.NET 中调用异步命令/函数,但反之则不行。一旦方法退出,即使 Task.Run 也不会执行 Lisp 操作。

最好的方法是将所有操作转换为 ARX/.NET。如果你想让 lisp 成为其中的一部分,至少要把需要异步的操作转换成 ARX/.NET。

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2012-07-25
    • 2016-09-07
    • 2017-03-12
    • 2016-09-18
    相关资源
    最近更新 更多