当前位置: 首页 > news >正文

MAUI劝退:内部消息机制(社区工具包)

        MAUI劝退得很啊,MessageCenter已经标记为废弃,建议改为社区工具包。这不叫“日新月异”,这叫朝令夕改。

        windows和MFC的消息机制是很麻烦的,各种高级语言都简化了消息机制,基本上都采用类似中间件的发布接收模型,使用发送和注册就能完成(以及取消注册)。

目录

一、引入社区工具包

二、弱引用和强引用

三、发送消息

四、接收消息

五、效果


一、引入社区工具包

        使用nuget工具引入CommunityToolkit.Mvvm,然后就可以了,粘贴代码的时候会自动添加所需的引用。

        代码需要引入这个:

using CommunityToolkit.Mvvm.Messaging;

二、弱引用和强引用

        弱引用简单但是可能浪费内存,强引用性能更好但是要主动注销。一般情况下也不是很在意啦。

        弱引用叫做WeakReferenceMessenger,强引用叫做StrongReferenceMessenger,他们都有一个默认实现叫做“Default”,我们用这个就够了。

三、发送消息

        发送消息非常简单:

				WeakReferenceMessenger.Default.Send(消息体);

        消息机制以消息体的类型和令牌来区分,不是很复杂的程序不需要区分令牌,因此上面的代码仅仅使用了消息体。

四、接收消息

        接收消息需要注册接收者,术语叫收件人。就是挂个回调函数上去嘛。

			WeakReferenceMessenger.Default.Register<消息体类型>(this, (r, m) =>{// Handle the message here, with r being the recipient and m being the// input message. Using the recipient passed as input makes it so that// the lambda expression doesn't capture "this", improving performance.MyLog.Log($"{r.ToString()} {m}");});

        如果不讲究的话消息体类型可以用string,然后就能在多个模块之间收发了。

        但是如果既发又收,都用string就会收到自己发出去的消息,这样就不理想了。

        可以简单地按照收发方向给每种消息定义一个独立的类型,这样就不会混淆了。

        比如:

	internal class MessageType_FileOpened{public MessageType_FileOpened(string file) { filename = file; }public string filename = "";}internal class MessageType_MenuClicked{public MessageType_MenuClicked(string file) { filename = file; }public string filename = "";}

五、效果

        没啥效果啦,两句代码而已。

        另,可以用Unregister注销接收者,不过一般忘了也没什么。


(这里是文档结束)

http://www.dtcms.com/a/577513.html

相关文章:

  • 西安 网站 公司wordpress同步微信公众号
  • Xshell效率实战:SSH管理秘籍技术大纲
  • 和平精英java 游戏程序
  • 【Java】异常详解+实例演示+知识总结
  • 【大模型训练】sglang 权重绑定和roll HF Meg相互转化
  • 有那个网站可以做报名链接的网站开发项目简单描述
  • C++ 链表 模拟 递归 迭代 力扣 24. 两两交换链表中的节点 题解 每日一题
  • 北京做网站的外包公司百度小程序注册
  • GitHub 全方位指南(续):实战进阶与生态拓展​
  • 二十四、STM32的DMA
  • 新能源汽车高压系统“隐形守护者”:X电容、Y电容、支撑电容、共模电感与薄膜电容的关系全解析
  • OpenCV(二十一):HSV与HSL
  • 东莞seo建站优化方法做网站最小的字体是多少钱
  • Linux安装镜像initrd深度解析:从Lorax构建到故障排查
  • 基础篇:IoC(六):资源和资源加载器
  • Qt之元对象系统
  • 宿州网站建设设计公司海口可信的海南网站建设
  • Go Map 实现原理解析:从数据结构到核心机制
  • 百度做的网站国外可以打开吗软件开发过程五个步骤
  • 快速入门 - 开始使用 Azure Digital Twins Explorer 中的示例场景
  • 快速入门 - Azure 数字孪生的 3D 场景工作室(预览版)入门
  • 【OS zephyr】子系统logging
  • 哪里有免费建设网站企业解决方案ppt
  • Android内核进阶之获取PCM状态snd_pcm_status:用法实例(八十三)
  • 建设银行网站用户登录网页类界面图片
  • 【产品调研】MATB-II 软件用户指南总结
  • 程序开发的步骤东莞关键词排名seo
  • 重装系统后,恢复mysql的方法
  • 年化波动率匹配原则在ETF网格区间选择中的应用
  • 智慧公厕系统单机版与联网版有哪些区别