zoukankan      html  css  js  c++  java
  • 事件管理

    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);
            }
        }
    }
    View Code
  • 相关阅读:
    微信客服系统开发SDK使用教程-给好友发消息任务
    微信客服系统开发SDK使用教程-客户端选择微信号登陆/登出通知
    微信客服系统开发SDK使用教程-客户端退出通知
    php优秀框架codeigniter学习系列——CI_Security类学习
    php优秀框架codeigniter学习系列——CI_Output类的学习
    php优秀框架codeigniter学习系列——CI_Router类学习
    My IELTS result has come out 我的雅思成绩出来了
    Travel notes in Vietnam
    asp.net学习
    makefile简单学习
  • 原文地址:https://www.cnblogs.com/Joke-crazy/p/9101552.html
Copyright © 2011-2022 走看看