事件管理
2018-06-18 00:14:11来源:未知 阅读 ()
using System; using System.Collections.Generic; namespace CustomUtils { /// <summary> /// 事件管理器 /// </summary> public class EventManager { private readonly static Dictionary<string, Action<EventMessageArgs>> eventTask = new Dictionary<string, Action<EventMessageArgs>>(); /// <summary> /// 注册事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="actionValue">事件回调</param> public static void RegisterEvent(string eventKey, Action<EventMessageArgs> actionValue) { if (!eventTask.ContainsKey(eventKey)) { eventTask[eventKey] = actionValue; } else { if (eventTask[eventKey] != null) { Delegate[] dels = eventTask[eventKey].GetInvocationList(); foreach (Delegate del in dels) { if (del.Equals(actionValue)) return; } } eventTask[eventKey] += actionValue; } } /// <summary> /// 注销事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="actionValue">事件回调</param> public static void UnregisterEvent(string eventKey, Action<EventMessageArgs> actionValue) { if (eventTask.ContainsKey(eventKey)) { eventTask[eventKey] -= actionValue; if (eventTask[eventKey] == null) { eventTask.Remove(eventKey); } } } /// <summary> /// 触发事件 /// </summary> /// <param name="eventKey">事件索引</param> /// <param name="args">消息内容(只在单次触发有效,若要连续传递请使用 CopyMessage )</param> public static void PostEvent(string eventKey, EventMessageArgs args) { if (eventTask.ContainsKey(eventKey)) { eventTask[eventKey](args); } args.Dispose(); } } /// <summary> /// 事件通知数据 /// </summary> public class EventMessageArgs : IDisposable { public EventMessageArgs() { messages = new Dictionary<string, object>(); } private Dictionary<string, object> messages; /// <summary> /// 复制 /// </summary> /// <param name="msg"></param> public void CopyMessage(EventMessageArgs msg) { messages = msg.messages; } /// <summary> /// 新增或替换 /// </summary> /// <param name="key">索引</param> /// <param name="value">新数据</param> public void AddOrReplaceMessage(string key, object value) { if (CheckMessage(key)) messages[key] = value; else messages.Add(key, value); } /// <summary> /// 删除 /// </summary> /// <param name="key">索引</param> public void RemoveMessage(string key) { if (CheckMessage(key)) messages.Remove(key); } /// <summary> /// 获取内容 /// </summary> /// <param name="key">索引</param> /// <returns>引用类型数据</returns> public object GetMessage(string key) { if (CheckMessage(key)) return messages[key]; else return null; } /// <summary> /// 获取内容 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="key">索引</param> /// <returns>数据</returns> public T GetMessage<T>(string key) { if (CheckMessage(key)) return (T)messages[key]; else return default(T); } /// <summary> /// 释放 /// </summary> public void Dispose() { messages.Clear(); messages = null; } private bool CheckMessage(string key) { return messages.ContainsKey(key); } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:匿名对象解析
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 学生信息管理系统.cpp(大二上) 2020-04-23
- Java固定资产管理系统 源码 jsp ssh 2020-01-09
- 数据结构-课程设计-职工管理系统 2020-01-02
- 五年C语言程序员,是深耕技术还是走管理? 2019-12-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash