学习ArcObjects 帮助 .NET遇到问题(二)自动执行 ArcGIS for Desktop 应用程序(二)

1、AppROTClass

        该类属于ESRI.ArcGIS.Framework,Esri应用程序运行对象表。"AppROT"(Application Running Object Table)的功能。它是用来全局记录当前正在运行的所有ESRI ArcGIS应用程序的列表。只有实现了ESRI's IApplication接口的应用程序对象会在此表中注册自己,并且当它们启动时加入表中,退出时从表中移除。ArcMap、ArcCatalog以及未来所有基于ESRI ArcGIS开发的应用程序都将自动在AppROT中注册。通过使用这个对象,可以随时获取当前正在运行的应用列表信息。
此外,开发人员如果创建了独立运行的“stand-alone” ArcObjects 应用程序,也可以利用这一机制通过实现IApplication接口并在AppROT中注册他们自己的应用程序来获得同样效果。例如:如果你开发了一个名为"MyCustomGISApp" 的独立GIS应用程序,并想要它能够像其他标准ArcGIS组件一样被监控和管理,则需要让"MyCustomGISApp" 实现IApplication接口并确保当该应用启动和退出时,在AppROT里进行相应地注册与注销操作。这样不仅可以方便用户查看其是否正常运行,同时还能让其他基于COM交互模式工作的部分能够识别和与之交互。

        AppROTClass事件接口

         IAppROTEvents        提供对Esri应用程序运行对象表上发生的事件的访问。

         IAppROTEvents 成员         AppRemoved        从表中删除应用程序引用时发生。

2 、AppRefClass

         该类属于ESRI.ArcGIS.Framework,对当前运行的应用程序的引用。该类无法直接引用应用程序框架内部对象时,可以创建一个名为`AppRef`的对象。该对象允许开发人员通过一个单例(singleton)模式创建的对象来访问应用程序上下文。

3、IObjectFactory

        提供对成员的访问,这些成员允许自动化客户端在应用程序的进程空间中创建任意对象。

4、主要步骤

  1. 在单击表单上的按钮时启动 ArcMap
    private ESRI.ArcGIS.Framework.IApplication m_application;
    
    private void btnStartApp_Click(object sender, EventArgs e)
    {
        ESRI.ArcGIS.Framework.IDocument doc = new ESRI.ArcGIS.ArcMapUI.MxDocumentClass();
        m_application = doc.Parent;
        m_application.Visible = true;
    }

  2. 与应用程序交互并创建组件
    IObjectFactory objFactory = m_application as IObjectFactory;
    
    //Use reflection to get ClsID of ShapefileWorkspaceFactory.
    Type shpWkspFactType = typeof(ShapefileWorkspaceFactoryClass);
    string typeClsID = shpWkspFactType.GUID.ToString("B");
    
    IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)objFactory.Create(typeClsID);
    IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)
        workspaceFactory.OpenFromFile(@"C:\data\test", 0);
    
    //Create the layer.
    IFeatureLayer featureLayer = (IFeatureLayer)objFactory.Create(
        "esriCarto.FeatureLayer");
    featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass("worldgrid");
    featureLayer.Name = featureLayer.FeatureClass.AliasName;
    
    //Add the layer to the document.
    IBasicDocument document = (IBasicDocument)m_application.Document;
    document.AddLayer(featureLayer);
    document.UpdateContents();

    5、成果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值