如何异步调用 Lisp 函数?

How to call Lisp functions Asynchronously?

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

这是不可能的。

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

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