使用C#与AutoCAD进行线程内外交互

5星 · 超过95%的资源 需积分: 50 72 下载量 41 浏览量 更新于2024-09-15 1 收藏 135KB DOCX 举报
"这篇文档主要讨论了如何使用外部.NET程序与AutoCAD进行交互,主要分为线程外和线程内两种交互方式,并提供了C#的示例代码来演示这一过程。" 在AutoCAD的二次开发中,C#.NET和AutoCAD.NET常常被用来增强和自动化AutoCAD的功能。本文档主要探讨了两种主要的交互方式: 1. **线程外交互**: 在这种模式下,两个独立的可执行程序(如.NET程序和AutoCAD)之间需要进行通信。过去,常用的方法是通过COM(组件对象模型)或者更早的DDE(动态数据交换)技术。这种方式利用IPC(进程间通信)实现,但效率较低,特别是在大量数据传输时。早期的ADS(AutoLISP应用程序服务)和外部VB应用程序的性能瓶颈就源于此。 2. **线程内交互**: 当代码以DLL(动态链接库)形式存在,无论是VB的ActiveX DLL、ObjectARX模块还是.NET程序集,与AutoCAD主线程的交互效率都会显著提高。数据可以通过指针直接传递,避免了IPC的低效。目前,AutoCAD的大部分API都设计用于线程内使用,包括LISP、ObjectARX和.NET API。 虽然.NET Remoting提供了一定程度的远程调用能力,但AutoCAD的.NET托管API实际上是对ObjectARX的封装,依赖于对内部对象的直接指针访问,无法跨越线程边界。相比之下,COM自动化接口允许线程外和线程内的操作,使其成为从外部程序驱动AutoCAD的理想选择。 在实践中,推荐的做法是避免在进程间传递大量信息。如果需要从外部程序控制AutoCAD,最佳方案是启动或连接到现有的AutoCAD实例,然后加载一个线程内的模块在AutoCAD进程中执行主要任务。文档中提供的C#代码示例展示了如何实现这个过程,它尝试连接到已运行的AutoCAD实例,或者根据需要启动新的AutoCAD实例。 理解这些交互方式对于有效地进行AutoCAD的C#.NET二次开发至关重要,能够帮助开发者优化性能,提高代码效率,并实现更复杂的自动化任务。