yanghao1 发表于 2009-8-28 12:32:00

如果去掉函数A(),则SendStringToExecute能正常执行,否则几乎没有响应,如何解决。

如果去掉函数A(),则SendStringToExecute能正常执行,否则几乎没有响应,如何解决。看函数:private void looh()
      {
            InsertBlock("c:\\3.dwg", new Point3d(1000, 1000, 0));
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            acDoc.SendStringToExecute("._zoom e ", true, false, false);
            
            A();
      }
如果去掉函数A(),则acDoc.SendStringToExecute("._zoom e ", true, false, false)能正常执行,
如果执行函数A(),则acDoc.SendStringToExecute("._zoom e ", true, false, false)几乎没有反应,
那位遇到过这个问题,是如何解决的。

雪山飞狐_lzh 发表于 2009-8-28 12:41:00

还是那句话:SendStringToExecute不要用
要么平台调用Arx的acedCommand方法
要么用代码实现
代码实现的方法:
1、调用Com接口,AcadApplication有ZoomXXX方法
2、仔细看下手册,提供了Zoom命令的实现代码!

雪山飞狐_lzh 发表于 2009-8-28 16:39:00

下面的代码代码是反射调用Com的代码
当然,你也可以先引用AutoCad的类型库,
然后直接调用Application.AcadApplication.ZoomExtents()方法
using System;
using System.Reflection;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;namespace TlsCad
{
    class TlsTest
    {
      
      public static void ZoomExtents()
      {
            object app = Application.AcadApplication;
            Type acApp = Type.GetTypeFromHandle(Type.GetTypeHandle(app));
            acApp.InvokeMember(
                "ZoomExtents",
                BindingFlags.InvokeMethod,
                null,
                app,
                new object);
      }
    }
}

yanghao1 发表于 2009-8-28 17:24:00


太有才,谢谢!
页: [1]
查看完整版本: 如果去掉函数A(),则SendStringToExecute能正常执行,否则几乎没有响应,如何解决。