C#编程-使用事件


使用事件
事件是一个动作或发生的事情,例如:鼠标点击、按键、鼠标移动或系统产生的通知。应用程序可以在事件发生的时候做出响应。通知的一个示例是中断。事件是对象发生的消息以表示事件的发生。事件是进程内通信的有效方法。它们对对象时有用的,因为它们标识了单个状态改变,可能对对象的客户端有价值。
考虑事件的示例。时钟是一个对象,它显示早上6点的时间,以闹钟的形式产生一个事件。您接受闹铃事件并且做出相应的动作。
下图显示了闹铃事件及对其的处理。

下图是一个泛化表示,它解释了事件和事件处理。

在C#中,委托与事件一起使用以实现事件处理。.NET Framework事件模型使用委托来将事件通知与方法绑定,称为事件处理程序。当事件产生的时候,委托调用相关事件处理程序。考虑一个网球视频游戏的场景。游戏玩家一用球拍击球就会生成一个事件。现在根据球拍的位置,委托将为事件选择事件处理程序。如果球拍的位置在玩家的右边,会产生将球发到场地左边的方法。当用户生成击球事件时,会动态确定以特定方法发球。

将委托用于事件
事件是在类中声明和产生的。可使用委托在相同类或其他类中将它们与事件处理程序相关联。事件是类的一部分,这个类用于发布事件。但是,其他类可以接受这些事件,或者换句话说,可以订阅这些事件。事件使用发布者和订阅者模型。
发布者是一个包含事件和委托定义的对象。事件与委托的关联还在发布者类中指定。发布者的对象调用事件,它被通知给其他对象。
订阅者是要接受事件并为事件提供处理程序的对象。发布者类的委托调用订阅者类的方法。这个在订阅者类中的方法时事件处理程序。发布者和订阅者模型的实现可以由相同类定义。
下图显示了发布者和订阅者对象使用的机制。

事件的实现包括事件定义、事件订阅和事件通知。
定义事件
在发布者类中事件的定义包括委托的声明和基于委托的事件的声明。
下面的代码定义了一个名为TimeToRise的委托和一个名为RingAlarm的事件,当它被引发时,调用TimeToRise委托:
public delegate void TimeToRise();private event TimeToRise RingAlarm;
订阅事件
发布者类事件需要与它的处理程序关联。事件处理程序方法时使用委托与事件关联的。当发布者对象产生事件的时候,订阅对象与需要调用的方法关联。
考虑名为Student的类,它包含一个名为WakeUp()的方法。要求是应在上午6点调用W
相关文章:
C#编程-使用事件
使用事件 事件是一个动作或发生的事情,例如:鼠标点击、按键、鼠标移动或系统产生的通知。应用程序可以在事件发生的时候做出响应。通知的一个示例是中断。事件是对象发生的消息以表示事件的发生。事件是进程内通信的有效方法。它们对对象时有用的,因为它们标识了单个状态改…...
Dijsktra算法理解笔记
Dijsktra算法理解笔记 学习了柳神的笔记 感谢柳神 Dijkstra算法是处理图问题中的最短路径的问题 最短路径问题可以大致分为两个方向 单源最短路径全局最短路径 以此为基准可以将最短路径算法这样划分: 单源最短路径 Dijkstra :不能求负权边Bellman-F…...
电流检测方法
电路检测电路常用于:高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用,都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV~数百mV的电阻值&…...
Linux scp命令 服务器之间通讯
目录 一. scp命令简介二. 本地服务器文件传输到远程服务器三. 本地服务器文件夹传输到远程服务器 一. scp命令简介 scp(Secure Copy Protocol)是用于在Unix或Linux系统之间安全地复制文件或目录的命令。 它使用SSH(Secure Shell)…...
C语言中的命名规则(期末版)
一、概述 命名规则是编程语言中的重要组成部分,它决定了变量、函数、常量等标符的命名方式。在C语言中,良好的命名规则可以增加代码的可读性和可维护性,提高程序的质量和开发效率。本文将详细介绍C语言中的命名规则,包括标识符的…...
远程开发之vscode端口转发
远程开发之vscode端口转发 涉及的软件forwarded port 通过端口转发,实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段,填需要转发的IP:PORT,即可转发远程服务器中的内网端…...
超简单的node爬虫小案例
同前端爬取参数一样,输入三个参数进行爬取 注意点也一样: 注意分页的字段需要在代码里面定制化修改,根据你爬取的接口,他的业务规则改代码中的字段。比如我这里总条数叫total,人家的不一定。返回的数据我这里是data.r…...
(每日持续更新)jdk api之FileFilter基础、应用、实战
博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿&…...
基于Matlab/Simulink开发自动驾驶的解决方案
文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶,能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能,从而推进自动驾驶感…...
gitlab部署
系统版本 [rootlocalhost ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.1 (Plow)gitlab包位置 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el9/gitlab-ee-16.7.2-ee.0.el9.x86_64.rpm关闭防火墙 [rootlocalhost data]# systemctl stop firew…...
JVM运行时数据区(下篇)
紧接上篇:JVM运行时数据区(上篇)-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态…...
生成式 AI 描绘复杂科学
生成式AI可以用来描述复杂的科学问题,主要是通过以下两种方式: 数据生成:生成式AI可以通过学习大量数据来生成新的数据,包括科学实验数据。例如,可以使用生成式AI来模拟复杂的物理实验,生成模拟数据&#…...
<蓝桥杯软件赛>零基础备赛20周--第14周--BFS
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…...
openEuler安装Docker艰辛路程
文章目录 安装docker测试docker关于windows docker拉取镜像查看所有镜像删除镜像删除不在运行的进程强制删除正在运行的进程 启动docker容器服务-d测试 停止docker容器服务查看docker启动进程更新容器(没有自启动功能,更新为自启动)docker端口映射进入容器修改内容退…...
python图像处理总结
等我有时间了,好好总结一下这几个图像处理包,为后面的研究做个铺垫 skimage包 可以用系统自带的图片,不用自己找图片 from skimage.io import imread, imshow from skimage import data image data.astronaut() imshow(image)后面可以拿这…...
腐烂的橘子 -- DFS、BFS
994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…...
java swing UI第三方设计器JFormDesiner和FlatLaf UI
安装JFormDesiner 官网:https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源,且付费的插件,可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷,初学者可能需要一定时间探索,熟…...
前端JS实现全屏和退出全屏的效果
全屏效果想必我们都很清楚把,平时追剧看电视剧什么都会使用全屏方便我们看,我们键盘的第一个键esc可以退出全屏,那么我们如何用js实现全屏的办法呢? 设置全屏 Document.requestFullscreen(),该方法用于异步请求使元素…...
蓝桥杯C组-填充-贪心
点击此处查看原题 *思路:首先要求 00 11 尽可能的多,所以尽可能多的多配对,配对只在i , i 1之间发生,所以只需要关注str[i] 和 str[i 1]即可,如果str[i] str[i 1] ,那么一定配对&#x…...
mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql
以下是一些常见的MySQL查询语句,用于查询当天、近一周、近一个月和近一年的数据,以及一些常见的报表查询。 查询当天的数据: SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据: SELECT * FROM t…...
手把手教你复现DM-VIO:用开源代码在Ubuntu 20.04上跑通这个SOTA视觉惯性里程计
从零搭建DM-VIO:Ubuntu 20.04实战指南与深度调优当视觉惯性里程计(VIO)遇上延迟边缘化技术,DM-VIO在三大主流数据集上创造了单目系统超越立体方案的奇迹。本文将带您穿越从环境配置到实战调优的全流程,揭秘这个2022年R…...
全方位强化 AI 逆向能力,这款 Skill 太实用了
让 Codex 默认支持 JS 逆向Codex GPT-5.4 默认对逆向和爬虫类请求比较保守,常见表现是只讲原则,不继续落地。市面上的常规做法是先发提示词,我这边因为每次重复发送比较麻烦,所以进一步封装成了 Skill,实际验证可行。…...
NVIDIA Vera Rubin 平台如何解决 Agentic AI 的 Scale-up 难题
NVIDIA Vera Rubin 平台如何解决 Agentic AI 的 Scale-up 难题 [外链图片转存中…(img-5hHDDlgn-1779546321135)] Agentic AI 改变了推理系统的负载形态。传统推理通常可以理解为一次请求、一次生成;Agentic inference 则会展开成非确定性轨迹:Agent 做…...
小模型爆发出惊人能量!斯坦福开源框架AgentFlow如何实现复杂任务中的可靠工具使用?
本文介绍了斯坦福大学开源的模块化智能体框架AgentFlow,它通过独特的架构设计和训练方法,在工具集成和规划能力上取得了突破性进展。AgentFlow以Qwen-2.5-7B-Instruct为基础,在10个基准测试中表现突出,超越了大50倍的模型和GPT-4o…...
生产环境最佳实践
生产环境最佳实践 前言 本文将介绍Spring Cloud Alibaba在生产环境中的最佳实践,包括配置优化、监控告警、高可用设计等方面。 一、高可用设计 1.1 服务端高可用 # Nacos集群配置 # 至少3个节点 # 推荐使用外部数据库spring:cloud:nacos:server-addr: nacos-1:8848,…...
2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这
2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...
CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具
CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 你是否曾为手动…...
今天不建Lovable ML平台,明天就被团队弃用!2025年AI工程团队留存率预警下的4步速建法
更多请点击: https://kaifayun.com 第一章:Lovable ML平台搭建 构建一个真正“可亲、可用、可信赖”的机器学习平台,核心不在于堆砌尖端框架,而在于以开发者体验(DX)和数据科学家工作流为设计原点。Lovab…...
企业级应用通过Taotoken实现AI能力冗余与故障转移设计
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用通过Taotoken实现AI能力冗余与故障转移设计 在构建依赖大模型API的企业级应用时,服务的连续性与稳定性是核心…...
抖音小店搜索排名规则及优化方法
一、抖音商城搜索排名规则1.商品相关性:商品标题、关键词与用户搜索词的匹配程度是重要因素。精准匹配的商品会在搜索结果中更靠前展示。例如,用户搜索"夏季连衣裙”,标题中明确包含该关键词且商品属性也相符的连衣裙,会优先被展示。商品…...
