事件是C#中基于委托的通信机制,用于发布者在动作发生时通知订阅者。通过定义事件、触发事件(如DownloadCompleted)和订阅处理(如OnDownloadFinished),实现对象间松耦合交互,支持使用EventHandler、lambda表达式订阅,并需及时取消订阅以避免内存泄漏,广泛应用于GUI和异步通知场景。
事件(Event)是 C# 中一种基于委托的机制,用于在对象之间实现松耦合的通信。它允许一个对象(发布者)在特定动作发生时通知其他对象(订阅者),而无需知道这些对象的具体细节。
事件本质上是对委托的封装,提供了“添加监听”和“移除监听”的安全机制。它通常用于表示类中的某些动作已完成,比如按钮被点击、文件下载完成等。
事件的定义依赖于委托类型,常见的是使用 EventHandler 或自定义委托。
1. 定义一个委托(可选,若使用泛型 EventHandler 可省略)
2. 声明事件
3. 在适当时机触发事件
示例:定义并发布事件
public class DownloadManager
{
// 使用内置泛型委托定义事件
public event EventHandler DownloadCompleted;
// 自定义事件参数类
public class DownloadEventArgs : EventArgs
{
public string FileName { get; set; }
public bool Success { get; set; }
}
// 触发事件的方法
protected virtual void OnDownloadCompleted(bool success, string fileName)
{
DownloadCompleted?.Invoke(this, new DownloadEventArgs
{
Success = success,
FileName = fileName
});
}
// 模拟下载完成并发布事件
public void SimulateDownload()
{
Console.WriteLine("开始下载...");
// 模拟操作
Thread.Sleep(1000);
OnDownloadCompleted(true, "example.zip");
}
}
如何订阅和处理事件
订阅事件就是将一个方法绑定到事件上,当事件被触发时,该方法会被自动调用。
示例:订阅事件
class Program
{
static void Main()
{
var downloader = new DownloadManager();
// 订阅事件
downloader.DownloadCompleted += OnDownloadFinished;
// 启动下载(会触发事件)
downloader.SimulateDownload();
}
// 事件处理方法
static void OnDownloadFinished(object sender, DownloadManager.DownloadEventArgs e)
{
if (e.Success)
{
Console.WriteLine($"文件 {e.FileName} 下载成功!");
}
else
{
Console.WriteLine("下载失败。");
}
}
}
你也可以使用匿名方法或 lambda 表达式来订阅:

downloader.DownloadCompleted += (s, e) => Console.WriteLine($"下载完成: {e.FileName}");
取消订阅事件
为了避免内存泄漏,尤其是长时间存在的发布者和短期存在的订阅者,应在适当时候取消订阅。
downloader.DownloadCompleted -= OnDownloadFinished;
基本上就这些。事件是实现观察者模式的简洁方式,广泛应用于 GUI 编程、异步操作通知等场景。只要理解了委托与事件的关系,使用起来就很自然。
# ai
# c#
# 封装
# Lambda
# 委托
# Event
# 泛型
# 匿名方法
# 并发
# 对象
# 事件
# 异步
# 自定义
# 应用于
# 下载完成
# 的是
# 尤其是
# 你也
# 长时间
# 可以使用
# 可选
# 应在
相关文章:
如何快速完成中国万网建站详细流程?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
模具网站制作流程,如何找模具客户?
如何在西部数码注册域名并快速搭建网站?
香港服务器部署网站为何提示未备案?
西安专业网站制作公司有哪些,陕西省建行官方网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
制作电商网页,电商供应链怎么做?
如何彻底删除建站之星生成的Banner?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
网站代码制作软件有哪些,如何生成自己网站的代码?
css网站制作参考文献有哪些,易聊怎么注册?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
宁波自助建站系统如何快速打造专业企业网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
建站之星安装需要哪些步骤及注意事项?
建站主机与虚拟主机有何区别?如何选择最优方案?
贸易公司网站制作流程,出口贸易网站设计怎么做?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在局域网内绑定自建网站域名?
建站之星下载版如何获取与安装?
建站之星如何防范黑客攻击与数据泄露?
如何配置FTP站点权限与安全设置?
建站之星后台密码遗忘或太弱?如何重置与强化?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
清除minerd进程的简单方法
C#如何使用XPathNavigator高效查询XML
建站主机如何选?高性价比方案全解析
文字头像制作网站推荐软件,醒图能自动配文字吗?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站之星在线版空间:自助建站+智能模板一键生成方案
宝塔建站无法访问?如何排查配置与端口问题?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何通过商城免费建站系统源码自定义网站主题?
建站之星后台管理如何实现高效配置?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
python的本地网站制作,如何创建本地站点?
制作证书网站有哪些,全国城建培训中心证书查询官网?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
,如何利用word制作宣传手册?
制作营销网站公司,淘特是干什么用的?
北京专业网站制作设计师招聘,北京白云观官方网站?
建站之星客服服务时间及联系方式如何?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何选择高性价比服务器搭建个人网站?
制作旅游网站html,怎样注册旅游网站?
制作销售网站教学视频,销售网站有哪些?
营销式网站制作方案,销售哪个网站招聘效果最好?
*请认真填写需求信息,我们会在24小时内与您取得联系。