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); }
}
}
}
支付红包
微信打赏