Revit SDK 介绍:EventsMonitor 事件监控器

前言

这个例子实现了一个事件监控器,当有事件被触发的时候,会生成一条日志记录。

内容

在这里插入图片描述

核心逻辑:

  1. 用户通过对话框选择想要注册的事件
  2. 对选中的事件进行注册,事件处理函数都是app_eventsHandlerMethod
  3. 当事件被触发,事件处理函数会在记录对话框中增加一条记录
 public void app_eventsHandlerMethod(Object obj, EventArgs args){ExternalApplication.EventLogManager.TrackEvent(obj, args);ExternalApplication.EventLogManager.WriteLogFile(obj, args);
}

事件机制是一个非常基本的机制,已有多篇类似博文。那么事件机制的原理是什么?观察者模式。

事件机制是一种软件设计模式,用于解耦系统中的各个组件。通过事件机制,系统中的一个组件可以发布事件,而其他组件可以注册监听器来处理这些事件。这样,发布事件的组件不需要关心有哪些监听器,而监听器可以独立处理事件。这种解耦可以提高系统的灵活性和可扩展性。
在事件机制中,事件源负责发布事件,而事件监听器负责监听事件并执行相应的处理逻辑。事件源发布事件后,事件监听器会根据自身的注册情况来消费这些事件。事件监听器需要实现一个监听器接口,该接口定义了处理事件的方法。通过实现这个接口,监听器可以根据自己的需要来处理不同类型的事件。 这个接口通常是一个泛型接口,其中的泛型参数表示当前监听器感兴趣的事件类型。
使用事件机制可以将系统中的各个组件解耦,提高系统的可维护性和可测试性。同时,事件机制还可以使系统更加灵活和可扩展,因为可以动态地添加或移除事件监听器,而不需要修改事件源的代码。这样,在系统需要增加新的功能或扩展已有功能时,可以通过添加新的事件监听器来实现,而不需要修改原有的代码。

观察者模式是一种软件设计模式,其中一个目标物件管理着所有依附于它的观察者物件,并在自身状态发生改变时主动发出通知。这种通知通常通过调用观察者实现的方法来实现,常用于实现事件处理系统,例如事件驱动模型。在JDK中也提供了观察者模式的设计,可以通过注册观察者对象来监听被观察者对象的状态改变,并在状态改变时收到通知。事件驱动模型是一种基于观察者模式的设计模型。它将系统中的各个组件看作是事件的生产者和消费者,当某个事件发生时,会触发相应的处理程序或函数。这种模型可以实现高效的异步处理和响应机制。在观察者模式中,事件驱动模型的实现主要包括事件生产者和事件消费者两个部分。事件生产者负责产生事件,并将事件通知给已注册的观察者对象。而事件消费者则是观察者对象,负责接收并处理事件。综上所述,观察者模式和事件驱动模型是紧密相关的概念。观察者模式提供了一种机制,使得观察者对象可以监听并相应被观察者对象的状态改变,而事件驱动模型则是一种基于观察者模式的设计模型,用于实现系统中的事件处理和响应机制。

关于观察者模式,可自行搜索,也可以参考:设计模式(五)观察者模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/122168.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp实现移动端的视频图片轮播组件

1、视频轮播组件app体验地址 https://tt.appc02.com/nesxr6 2、支持小程序、H5、APP,在小程序上运行的效果图 3、使用方法 第一步,按照截图步骤配置好 "app-plus": {"subNVues": [{"id": "videoMask", // 唯…

Vue3+Ts实现父子组件间传值的两种方式

文章目录 写在前面1、v-modelemit传值1.1父向子传递数据1.2子向父传递数据 2、使用v-bindemit2.1父向子传递数据2.2子向父传递数据 总结 写在前面 对于常用的组件间传参最近有了有点小心得总结一下,主要是两种子向父组件传参的方式总结。欢迎评论区讨论 概览&…

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面:核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作: 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 (1)创建线程组 &#xf…

Build阶段-Maven安装配置

构建Java项目的工具一般有两种选择,一个是Maven,一个是Gradle。 这里我们选择Maven作为项目的编译工具。 具体安装Maven流程不做阐述,但是需要确保配置好Maven仓库私服以及JDK编译版本

哈希的应用——位图

文章目录 前言1. 面试题思考2. 位图2.1 位图的概念2.2 思路讲解及代码实现结构定义构造函数set和reset接口实现set和reset测试观察test接口实现test接口测试思考 3. 位图的应用习题1习题2习题3 4. 总结5. 源码5.1 bitset.h5.2 Test.c 前言 前面的文章里我们学习了哈希表&#x…

vs+opencv+QT调试程序

2021-09-28vsopencvQT简单的图像处理工程_opencv 用qt还是vs_二两山栀子的博客-CSDN博客 【vsopencvQt搭建简单的图像处理界面】https://www.bilibili.com/video/BV16T411j7XQ?vd_source0aeb782d0b9c2e6b0e0cdea3e2121eba 调试过程一直出现这种问题,后来改DEBUG为…

JAVA宝典----容器(理解记忆)

目录 一、Java Collections框架是什么? 二、什么是迭代器? 三、Iterator与ListIterator有什么区别? 四、ArrayList、Vector和LinkedList有什么区别? 五、HashMap、Hashtable、TreeMap和WeakHashMap有哪些区别? 六…

一辆新能源汽车的诞生之旅:比亚迪常州工厂探营

作为在新能源汽车领域首屈一指的国产品牌,比亚迪近年来可以说是捷报频传,高奏凯歌。 以比亚迪常州工厂为例,据介绍该工厂当初规划设计时定下的生产目标,是年产量能够达到20万辆。然而在2023年上半年,该工厂光是主要销往…

自然语言处理实战项目17-基于多种NLP模型的诈骗电话识别方法研究与应用实战

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目17-基于NLP模型的诈骗电话识别方法研究与应用,相信最近小伙伴都都看过《孤注一掷》这部写实的诈骗电影吧,电影主要围绕跨境网络诈骗展开,电影取材自上万起真…

「网页开发|前端开发|Vue」05 Vue实战:从零到一实现一个网站导航栏

本文主要介绍如何从最开始的草图,通过确定基本结构、修改元素布局、美化外观来实现一个网站导航栏,从而熟悉网页开发的基本流程。同时,我们会把性能、规范性、可维护性方面的代码优化也考虑其中。 文章目录 本系列前文传送门一、场景说明&am…

Mac Homebrew中常用的 Brew 命令

Mac 中常用的 Brew 命令集 Brew(Homebrew)是一个强大的包管理器,用于在 macOS 上安装、更新和管理各种软件包。它使得在 Mac 上安装开发工具、应用程序和库变得轻松和便捷。本博客将介绍一些在 Mac 中常用的 Brew 命令,以帮助您更…

用通俗易懂的方式讲解大模型分布式训练并行技术:流水线并行

近年来,随着Transformer、MOE 架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&…

【SpringBoot】最基础的项目架构(SpringBoot+Mybatis-plus+lombok+knife4j+hutool)

汝之观览,吾之幸也! 从本文开始讲下项目中用到的一些框架和技术,最基本的框架使用的是SpringBoot(2.5.10)Mybatis-plus(3.5.3.2)lombok(1.18.28)knife4j(3.0.3)hutool(5.8.21),可以做到代码自动生成,满足最基本的增删查改。 一、新…

Linux 多进程解决客户端与服务器端通信

写一个服务器端用多进程处理并发,使两个以上的客户端可以同时连接服务器端得到响应。每当接受一个新的连接就fork产生一个子进程,让子进程去处理这个连接,父进程只用来接受连接。 与多线程相比的不同点:多线程如果其中一个线程操…

小红书笔记爬虫

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

Ubuntu入门05——磁盘管理与备份压缩

1.检查磁盘空间占用情况 2.统计目录或文件所占磁盘空间大小 3.压缩 3.1 zip、unzip和zipinfo 运行时发现上面命令不成功,换成: (将文件lkw放入压缩文件lkw01.zip中) sudo zip -m lkw01.zip lkw 解压文件: 实操&…

MySQL从入门到精通【实践篇】之使用Sharding-JDBC 分库分表详解

文章目录 0. 前言本文技术组件版本基本介绍 2. 使用和配置:步骤1 引入依赖步骤2 配置数据源和分片策略步骤3 核心代码MybatisPlusConfig 核心配置OrderServiceOrderServiceImplOrderInfoOrderMapperOrderControllerBaseMapper 3. 数据库分片配置在我的demo工程中大家…

高等数学刷题

研究可不可导的两大问题 1.▲x能不能->0(正负均要) 2.函数可不可以不连续,通常用第二个例子 隐藏条件的挖掘 关键在于分析出f(x0)0f(0)

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:

postgresql-类型转换函数

postgresql-类型转换函数 简介CAST 函数to_date函数to_timestampto_charto_number隐式类型转换 简介 类型转换函数用于将数据从一种类型转换为另一种类型。 CAST 函数 CAST ( expr AS data_type )函数用于将 expr 转换为 data_type 数据类型;PostgreSQL 类型转 换…