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、主要步骤
- 在单击表单上的按钮时启动 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; }
- 与应用程序交互并创建组件
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、成果