Response to Event in Arc Engine

来源:互联网 发布:淘宝代充王者荣耀流程 编辑:程序博客网 时间:2024/06/05 21:14
今天又看了看C#中的事件响应机制和delegate的概念,对此有了些理解,根据这些概念来写一些进行arc engine开发时对于arc object上的事件的响应。
 
在arc engine 开发中 arc object 是作为COM类引用到.net中的,对其上事件的响应也是通过委托delegate来实现,只是对于委托delegate和相应的事件已经在arc object中定义好了,我们只需实例化一个delegate对象将其加到事件的列表中去即可。具体步骤如下:
1。 Create a delegate 声明一个delegate用来响应事件。

  IAppROTEvents_AppRemovedEventHandler m_appRemoved;
 
 在arc object 的COM类中 委托的名字有四部分组成:事件接口名字,下划线,事件名字,EventHandler。
 
2。用我们自己定义的函数(即用来响应事件的方法)实例化这个委托,从而建立了一个委托的实例
 
  //Create a delegate instance and add it to AppRemoved event
   m_pAppRot = new AppROTClass();
 
   //用我们自己定义的方法实例化该委托。
 
   m_appRemoved = new IAppROTEvents_AppRemovedEventHandler(AppRemoved);
3。将建立好的委托实例加到事件中去。 事件可以理解为在事件发布者(arc object)中定义好的一个委托链,该委托链(即事件)何时发生 也在事件发布者中进行了定义,我们要做的是把自己的方法通过委托实例加到这个委托链中去,该委托链(即事件)发生时一并加以执行。
 
   // add the delegate to the event
   ((IAppROTEvents_Event)m_pAppRot).AppRemoved += m_appRemoved;
所需注意的是一点接口上的转换类的默认接口一般都不在事件类上,故要首先转到事件接口上才能访问到事件。(IAppROTEvents_Event)就是进行了一下转换。
 
 
define the method
 
private void QuitArcMap()
  {
   if (m_pDoc != null)
   {
    m_pApp.Shutdown(); //Quit ArcMap
    m_pDoc = null;     //Release m_pDoc
    m_pApp = null;     //Release m_pApp
    cmdStartArcMap.Enabled = true;
    cmdAddData.Enabled = false;
    cmdQuitArcMap.Enabled = false;
   }
  }
 
一点粗浅理解,供交流。
 
原创粉丝点击