cmdecho问题
我维护了一个自动化项目,该项目接受用户输入,通过一些预处理将数据发送到启动AutoCAD并准备绘图的工作站。预处理全部使用Visual Studio中开发的C#项目进行。几个月来一切顺利。最近一位新开发人员加入了团队,他的代码在预处理部分工作。和以前一样,我们从这个C#代码启动AutoCAD,然后使用SendCommand类,我们将一堆变量和设置注入AutoCAD,LISP程序使用这些变量和设置来创建图纸。简而言之,我们将OSMODE、PICKBOX设置为所需值,这一切都很酷。但在过去,我也总是将CMDECHO设置为0。新代码启动创建绘图的LISP文件,然后它(C#代码)在完成后关闭AutoCAD文档。过去我使用LISP关闭文件,但新方法从C#关闭文件。
我开始注意到,有时AutoCAD绘图文件在绘图完成之前关闭。不是一件好事。新开发人员告诉我,他的代码实际上会等到LISP程序完成后才关闭文件。他是如何做到这一点的我还没有研究过,但他的想法是(setvar'CMDECHO 0)命令是导致过早关闭的原因。所以为了安抚团队,我将CMDECHO的命令设置为1而不是0。好吧,图纸开始完成,但我们同时修复了一些其他错误,所以我不能确定这是修复它的原因。我有限的理解是,虽然您可以从C#与AutoCAD交谈,但您不能从AutoCAD与C#交谈,尤其是从LISP。我不相信这种设置是导致C#程序等待LISP文件完成的原因。LISP文件中没有代码可以说“嘿,我完成了!”那么这真的是正在发生的事情,还是只是像我从一开始就认为的那样工作?
**** Hidden Message ***** LISP本质上以“嘿,我完成了”的消息结束,因为LISP函数在完成之前有效地控制了系统。 感谢dgorsman,
因此通过将CMDECHO变量设置为1,宣布“嘿,我完成了”,并且通过将CMDECHO设置为0,它保持沉默。因此,C#代码永远不会得到这个词,所以它只是过早地关闭了绘图文件......我不确定我是否明白这一点,因为如果从来没有宣布“嘿,我完成了”,那么C#代码什么时候知道关闭事情? 我非常确定CMDECHO在这方面没有影响,因为一旦例程启动,它就会接管AutoCAD
您如何从C#关闭它?我想知道C#代码是否发送了相当于全部取消的命令?
根据上下文,SendCommand()方法可能同步运行,也可能不同步运行。 我以为CMDECHO只是确定提示和输入是否打印到命令窗口,对执行没有影响。
这也是我对它的理解。我不认为C#代码或AutoCAD或Windows本身会为这个过程打开大门,等待LISP代码完成。但我对背景知识的理解是有限的,所以我该说谁呢。C#代码执行doc。Close()结束时,(doc是在C#中创建的对象)。但是,在加载LISP文件、分配变量和执行LISP代码的send命令之间也没有睡眠或任何东西。根据所绘制产品的复杂程度,完成图纸需要4到10秒的时间<今天上午晚些时候,我将在其中一个LISP文件中延迟20秒左右,看看C#代码是否真的像另一位开发人员所断言的那样等待。 之前忘记了文档/应用程序上下文,尤其是当它应用于LISP时。
如果LISP代码正在运行,AutoCAD应该忽略该文档中的所有输入。但是,如果没有检查LISP函数在该文档的上下文中是否是活动的,则可以使用应用程序级别的方法来强制关闭绘图。
页:
[1]