乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 106|回复: 7

cmdecho问题

[复制链接]

16

主题

506

帖子

6

银币

中流砥柱

Rank: 25

铜币
570
发表于 2016-5-11 15:16:30 | 显示全部楼层 |阅读模式
我维护了一个自动化项目,该项目接受用户输入,通过一些预处理将数据发送到启动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文件中没有代码可以说“嘿,我完成了!”那么这真的是正在发生的事情,还是只是像我从一开始就认为的那样工作?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2016-5-11 15:39:29 | 显示全部楼层
LISP本质上以“嘿,我完成了”的消息结束,因为LISP函数在完成之前有效地控制了系统。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2016-5-11 16:20:22 | 显示全部楼层
感谢dgorsman,
因此通过将CMDECHO变量设置为1,宣布“嘿,我完成了”,并且通过将CMDECHO设置为0,它保持沉默。因此,C#代码永远不会得到这个词,所以它只是过早地关闭了绘图文件......我不确定我是否明白这一点,因为如果从来没有宣布“嘿,我完成了”,那么C#代码什么时候知道关闭事情?
回复

使用道具 举报

16

主题

506

帖子

6

银币

中流砥柱

Rank: 25

铜币
570
发表于 2016-5-11 16:26:59 | 显示全部楼层
我非常确定CMDECHO在这方面没有影响,因为一旦例程启动,它就会接管AutoCAD
您如何从C#关闭它?我想知道C#代码是否发送了相当于全部取消的命令?
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2016-5-11 16:58:47 | 显示全部楼层

根据上下文,SendCommand()方法可能同步运行,也可能不同步运行。
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2016-5-11 17:58:06 | 显示全部楼层
我以为CMDECHO只是确定提示和输入是否打印到命令窗口,对执行没有影响。
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2016-5-12 08:53:45 | 显示全部楼层

这也是我对它的理解。我不认为C#代码或AutoCAD或Windows本身会为这个过程打开大门,等待LISP代码完成。但我对背景知识的理解是有限的,所以我该说谁呢。C#代码执行doc。Close()结束时,(doc是在C#中创建的对象)。但是,在加载LISP文件、分配变量和执行LISP代码的send命令之间也没有睡眠或任何东西。根据所绘制产品的复杂程度,完成图纸需要4到10秒的时间<今天上午晚些时候,我将在其中一个LISP文件中延迟20秒左右,看看C#代码是否真的像另一位开发人员所断言的那样等待。
回复

使用道具 举报

51

主题

613

帖子

9

银币

中流砥柱

Rank: 25

铜币
815
发表于 2016-5-12 10:15:59 | 显示全部楼层
之前忘记了文档/应用程序上下文,尤其是当它应用于LISP时。
如果LISP代码正在运行,AutoCAD应该忽略该文档中的所有输入。但是,如果没有检查LISP函数在该文档的上下文中是否是活动的,则可以使用应用程序级别的方法来强制关闭绘图。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-4-29 16:28 , Processed in 2.214147 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表