恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

C Sharp委托、事件、多线程

  • 首页
  • 资讯中心
  • /
  • C Sharp委托、事件、多线程

相关资讯

c++ 中的容器 vector 与数组 array 2026/8/19 20:41:45
BoxPacker 源码架构解析:Packer、VolumePacker、LayerPacker 三大核心如何协作? 2026/8/19 20:41:45
Effective MLOps 模型开发实战:从 EDA 到生产级训练脚本的完整流程 2026/8/19 20:36:45

最新资讯

Polestar订阅制:汽车即服务的商业模式与用户价值分析
SMUDebugTool完整调优指南:一次翻车教会我的AMD处理器调试全流程
一文读懂 GeoJSON.io:把散落的地图数据变成一张可用地图
5种流式ETL核心模式全栈实战|全网独家复现过滤路由转换聚合触发、助力实时数仓清洗入湖、提质增效、合规落地精准优化
AI配音能用来做短视频吗?亲测效果分享
2000-2024年中国历年城市统计年鉴(面板数据)

今日推荐

Windows 安卓应用安装终极方案:5分钟上手免费APK安装器,三步告别模拟器
WarcraftHelper 魔兽争霸3优化实战指南
抖音批量下载实战手册:用douyin-downloader把6小时手工劳动压缩到15分钟

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

C Sharp委托、事件、多线程

发布时间:2026/8/19 20:41:45
C Sharp委托、事件、多线程 文章目录委托Delegate事件Event—— 安全的“通知系统”多线程Multithreading—— “同时做多件事”委托Delegate委托是方法的模板可以理解为接口中的方法调用时需要new但是在调用过程中要传入和委托声明一样的方法(参数列表要相同)delegatevoidFooDelegate();delegatestringFooInputDelegate(intnum);voidMain(){FooDelegatefooDelegatenewFooDelegate(Foo1);fooDelegatefooDelegateFoo2;// 如果委托不为空就调用委托方法fooDelegate?.Invoke();FooInputDelegatefooInputDelegatenewFooInputDelegate(Foo2);fooInputDelegate(66).Dump();}voidFoo1(){foo1.Dump();}voidFoo2(){foo2.Dump();}stringFoo2(intnum){return(num1).ToString();}在长耗时的程序中延迟1s输出内容delegatevoidCallback();voidMain(){HeavyJob(CallbackImp);}voidHeavyJob(Callbackcallback){Thread.Sleep(1000);callback?.Invoke();}voidCallbackImp(){HeavyJob.Dump();}委托的选择逻辑delegateboolRuleDelegate(intx,inty);intPock(inta,intb,RuleDelegateruleDelegate){if(ruleDelegate(a,b))returna;elsereturnb;}boolrule1(inta,intb){returntrue;}boolrule2(inta,intb){returnfalse;}voidMain(){Pock(10,20,rule1).Dump();Pock(10,20,rule2).Dump();}事件Event—— 安全的“通知系统”是什么事件是委托的升级版。比如你家门铃事件别人只能按门铃触发事件但不能直接拆掉你的门铃线路保证安全。为什么需要它安全外部代码只能订阅或取消订阅-不能直接清空所有绑定。场景比如游戏中的“玩家死亡时通知所有敌人停止攻击”。怎么用//步骤 1定义一个门铃事件publicclassDoorbell{//声明一个事件基于委托publiceventActionstringOnRing;publicvoidRing(){//出发时间按门铃OnRing?.Invoke(有人按门铃啦);// ?. 防止未订阅时出错}}//步骤 2住户的反应订阅事件publicclassResident{publicvoidReactToRing(stringmsg){Console.WriteLine(住户msg我去开门);}}//步骤 3使用门铃voidMain(){DoorbelldoorbellnewDoorbell();ResidentresidentnewResident();//住户订阅门铃时间doorbell.OnRingresident.ReactToRing;//有人按门铃doorbell.Ring();}住户有人按门铃啦我去开门?.安全检查等价于if(OnRing!null){OnRing.Invoke(...);}Invoke正式“触发事件”多线程Multithreading—— “同时做多件事”是什么假设你在煮饭主线程同时还要切菜子线程。多线程就是让程序能“同时”处理多个任务提升效率。为什么需要它防止主界面卡死比如下载文件时不冻结界面。充分利用CPU多核性能。怎么用//方法 1传统方式Thread—— 手动控制voidMain(){ThreadthreadnewThread((){Console.WriteLine(子线程我在切菜);});thread.Start();Console.WriteLine(主线程我在煮饭);}主线程我在煮饭 子线程我在切菜//方法 2现代方式Task—— 更简单高效voidMain(){Task.Run((){Console.WriteLine(子线程我在烧水);});Console.WriteLine(主线程我在炒菜);}主线程我在炒菜 子线程我在烧水//方法 3异步编程async/await—— 等待不阻塞publicasyncTaskCookDinner(){Console.WriteLine(开始做饭);//异步煮饭不阻塞awaitTask.Run((){Thread.Sleep(2000);//2sConsole.WriteLine(饭煮好了);});Console.WriteLine(开始炒菜);//煮晚饭开始//await CookDinner();//调用}asyncTaskMain(){awaitCookDinner();}开始做饭 饭煮好了 开始炒菜() {}这是一个 Lambda 表达式相当于快速写一个“匿名方法”。()参数列表无参数时留空。箭头符号表示“执行后面的代码”。{}代码块具体要执行的任务。ThreadthreadnewThread((){Console.WriteLine(切菜);});// 直接把任务写在括号里相当于voidCutVegetables(){Console.WriteLine(切菜);}ThreadthreadnewThread(CutVegetables);// 传入方法名委托和事件的区别委托是功能基础事件是加了限制的委托类似public和private的区别。多线程会加快程序速度吗不一定如果任务简单切换线程的开销可能反而更慢。适合处理耗时操作如文件读写。async/await 和 Task 的区别async/await 是基于 Task 的语法糖让异步代码看起来像同步代码更易读。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号