专业编程基础技术教程

网站首页 > 基础教程 正文

221.C# 事件总线

ccvgpt 2024-08-28 13:35:37 基础教程 24 ℃

摘要


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

正文


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

221.C# 事件总线

事件参数类

Bash
// 事件参数类
public class MessageEventArgs: EventArgs
{
    public string Message { get; }

    public MessageEventArgs(string message)
    {
        Message = message;
    }
}

自定义事件总线类

Bash
// 自定义事件总线类
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);
    }
}

订阅者类

// 订阅者类
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);
    }
}


界面调用

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!");
    }
}

最近发表
标签列表