乐筑天下

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

从后台线程访问 AutoCAD

[复制链接]

2

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
11
发表于 2015-11-27 07:34:33 | 显示全部楼层 |阅读模式
大家好,感谢您在此论坛中提供的所有信息,我发现它在很多场合都很有用。但是,我现在有一个问题,我找不到答案。我的公司有一个应用程序,需要定期跳转到 AutoCAD 并执行一些工作(通常是对数据库对象执行 CRUD 操作)。目前实现的方式如下:- 我们有一个AutoCAD插件,在插件的主 IExtensionApplication 类中,我们在 Initialize() 方法中启动一个后台线程,如下所示:Thread backgroundThread = new Thread(backgroundThreadNew);。
backgroundThread.Name = “MainThreadScheduler”;。
backgroundThread.IsBackground = true;。
backgroundThread.Start(Dispatcher.CurrentDispatcher);- 当我们的应用程序想要访问AutoCAD时,我们要求AutoCAD从其主线程回调到我们的应用程序,方法是执行以下操作:Dispatcher.Invoke(new MainThreadCallbackDelegate(mainThreadCallback));- 当我们收到回调时,我们第一次尝试并检查AutoCAD是否不忙:private bool isCadQuiescent()。
{。
布尔静止 = 真;。
如果(文档,LockMode() != DocumentLockMode.None && document.LockMode() != DocumentLockMode.NotLock)。
{。
静态 = 假;。
}。
    。
如果 (!Application.IsQuiescent)。
{。
静态 = 假;。
}。
返回静态;。
}- 如果 AutoCAD 繁忙,我们将不执行任何操作并等待另一个回调。如果它不忙,我们要求AutoCAD调用我们使用以下命令定义的命令:Application.DocumentManager.MdiActiveDocument.SendStringToExecute(“MY_COMMAND\n”, false, false, false);- 在定义“MY_COMMAND”的方法中,我们启动一个事务并像往常一样使用所需的DB对象我会说99%的时间,一切都很顺利。但是,另外1%的时间我收到以下异常:
  1. eInvalidInput
  2. at Autodesk.AutoCAD.ApplicationServices.Document.SendStringToExecute(String command, Boolean activate, Boolean wrapUpInactiveDoc, Boolean echoCommand)
我的问题是:1.这是尝试控制AutoCAD的有效方法吗?2. 在尝试发送命令之前,我们是否进行了足够的检查以确保AutoCAD确实处于静止状态?3. 在什么情况下,我会收到错误?到目前为止,从用户报告和我们自己的日志记录中,我无法确定这一点。尝试像这样控制AutoCAD时,还有其他提示吗?非常感谢!。

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

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

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-11-29 17:10:07 | 显示全部楼层
这听起来像是核心控制台的工作。在这里搜索“核心控制台”并查看这些帖子http://through-the-interface . typepad . com/through _ the _ interface/Core-Console/
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2015-11-30 00:54:36 | 显示全部楼层
不确定我们是否有足够的信息。
跳转到 AutoCAD...在客户端会话中,还是在服务主机上?
为什么要在 Initialize() 加载插件,以启动单独的后台线程,请求回调,检查它(应用程序)是否可用...只是为了“做”某事?
如果在客户端会话上运行,为什么在没有用户授权的情况下对用户打开的数据库执行任何操作...或者这只是一种用户自动化?
如果在服务主机上运行,只需监视文件,文件夹,电子邮件等更改以及队列中给定数据库的相应指令的操作,而无需检查访问权限,因为服务主机是会话的举措。
如果保持服务主机会话的负载太大(即使没有“执行”任何操作?),或者您发现需要批处理,那么请考虑上面提到的核心控制台,特别是串联(而不是并行)。
干杯
回复

使用道具 举报

2

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
11
发表于 2015-11-30 07:00:49 | 显示全部楼层
抱歉,我显然没有为这个问题提供足够的背景
为此,我们有一个AutoCAD插件,如我所述。用户启动我们的应用程序和AutoCAD。然后,我们的应用程序可以连接到插件。插件中的后台线程从我们的应用程序接收需要在AutoCAD中绘制的几何图形。然后将此几何图形输入AutoCAD的过程如我在原始帖子中所述。
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 22:01 , Processed in 0.147268 second(s), 60 queries .

© 2020-2025 乐筑天下

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