EventBus是在开发APP和小程序等前端应用时,比较常用的发布/订阅事件总线。今天在开发WPF桌面应用时,需要在后台进程同时通知到页面和弹窗。我就想到了这样一类,其它挺简单的一个类,定义一个事件。添加 注册、发送、接收等方法。我这里的On方法是来注册的。
public class EventBus { private static EventBus GlobalDispatcher; public delegate void EventHandler(params object[] objs); private readonly Dictionary EventListeners = new Dictionary(); public static EventBus Dispatcher { get { if (GlobalDispatcher == null) { GlobalDispatcher = new EventBus(); } return GlobalDispatcher; } } public void On(String evt, EventHandler handler) { if (EventListeners.ContainsKey(evt)) { EventListeners[evt] += handler; } else { EventListeners.Add(evt, handler); } } public void Emit(String evt, params object[] objs) { if (EventListeners.ContainsKey(evt)) { EventListeners[evt](objs); } } public void Off(String evt, EventHandler handler) { if (EventListeners.ContainsKey(evt)) { EventListeners[evt] -= handler; if (EventListeners[evt] == null) { EventListeners.Remove(evt); } } } }