使用事件一般需要两个步骤,首先,需要一个函数在得到事件通知后进行响应和处理,这个就是事件函数的定义。这个函数必须有两个参数,第一个参数是Object对象表示事件发送者,第二个参数是事件特定的对象,其中包含该特定事件的参数,该对象中包含有事件发送者向接收着传递的比较参数。例如,对于专业启动事件(DisciplineOpenedEventArgs)使用事件的第二步是将第一步中定义的处理函数,在BIMBase中注册。事件的注册通常在IExternalApplication.OnStartup(BPUIApplication)函数中执行,通常用“+=”来注册一个事件。事件的注销通常在IExternalApplication.OnShutdown(BPUIApplication)函数中执行,通常用“-=”来注销一个事件。

以专业启动事件为例,示例代码6-1在插件加载时完成了专业启动事件的注册,然后在切换到二次开发专业时,触发了事件函数。

[BPExternalAplicationAttribute]
public class ApplicationDemo : IExternalApplication
{
    public override void onStartup(BPUIApplication uiApp)
    {
        uiApp.application.DisciplineOpened +=ActiveDocument_DisciplineOpened;
        bool bTest = uiApp. application.refreshDiscipline("二次开发");
        base.onStartup (uiApp);
    }
    void ActiveDocument_DisciplineOpened(object sender,BIMBaseCS.Events.BPDisciplineOpenedEventArgs e)
    {
        if (e. domainKeyName =="二次开发")
            MessageBox.Show("响应专业启动事件! ");
    }
}

代码6-1 事件定义注册实例代码