编辑
2025-09-25
C#
00

目录

摘要
正文

摘要

C# 事件总线是一种在软件架构中常见的设计模式,用于解耦事件的发布和订阅。它允许多个组件或对象之间通过订阅和发布事件来进行通信,而无需直接相互引用。事件总线可以用于在应用程序中传递消息、通知和数据,从而实现松耦合和灵活性。

正文

EventBus是一种事件总线框架,它维护一个事件字典,其中包含发布者和订阅者的信息。当事件发生时,发布者将事件实例传递到事件总线中,并等待订阅者的处理。订阅者从事件总线中获取事件实例,并执行事件处理程序。事件实例负责维护事件状态,并在事件处理程序执行完毕后,将事件状态保存在字典中以便以后使用。通过使用EventBus,发布者和订阅者可以通过一种简单的方式进行事件通信。

image.png

事件参数类

C#
// 事件参数类 public class MessageEventArgs: EventArgs { public string Message { get; } public MessageEventArgs(string message) { Message = message; } }

自定义事件总线类

C#
// 自定义事件总线类 public class EventBus { //定义事件 public event EventHandler<MessageEventArgs> MessageReceived; public void Publish(string message) { OnMessageReceived(new MessageEventArgs(message)); } protected virtual void OnMessageReceived(MessageEventArgs e) { MessageReceived?.Invoke(this, e); } }

订阅者类

C#
// 订阅者类 public class Subscriber { private Action<string> callback; public Subscriber(Action<string> callback) { this.callback=callback; } public void HandleMessage(object sender, MessageEventArgs e) { callback(e.Message); } }

界面调用

C#
public partial class Form1 : Form { EventBus eventBus = new EventBus(); Subscriber subscriber; public Form1() { InitializeComponent(); subscriber = new Subscriber((x) => { MessageBox.Show(x); }); // 订阅事件 eventBus.MessageReceived += subscriber.HandleMessage; } private void btnPublish_Click(object sender, EventArgs e) { // 发布事件 eventBus.Publish("Hello, EventBus!"); } }

image.png

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!