Esempio n. 1
0
        void _AddValue(string key1, object key2, GlobalNotificationDelegate val)
        {
            var objDic = ValueOrDefault(_dic, key1);

            if (objDic == null)
            {
                objDic = _dic[key1] = new Dictionary <object, GlobalNotificationDelegate>();
            }

            var res = ValueOrDefault(objDic, key2);

            if (res == null)
            {
                objDic[key2] = val;
            }
            else
            {
                objDic[key2] = objDic[key2] + val;
            }
        }
        public void Register(string name, object target, GlobalNotificationDelegate action, bool mainThread = false)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }


            lock (_locker)
            {
                _AddValue(name, target, action);
            }
        }
        bool _RemoveValue(string key1, object key2, GlobalNotificationDelegate val)
        {
            var objDic = ValueOrDefault(_dic, key1);

            if (objDic == null)
            {
                return(false);
            }

            var res = ValueOrDefault(objDic, key2);

            if (res == null)
            {
                return(false);
            }
            else
            {
                objDic[key2] = objDic[key2] - val;
            }
            return(true);
        }
        void _AddValue(string key1, object key2, GlobalNotificationDelegate val)
        {
            //从总的dic中取出该消息的所有注册
            var objDic = ValueOrDefault(_dic, key1);

            if (objDic == null) //如果没有注册,则新增加一个
            {
                objDic = _dic[key1] = new Dictionary <object, GlobalNotificationDelegate>();
            }

            var res = ValueOrDefault(objDic, key2); //从该消息中找到某个target的设置

            if (res == null)                        //如果这个target没有设置 则设置上去
            {
                objDic[key2] = val;
            }
            else
            {
                objDic[key2] = objDic[key2] + val;
            }
        }
        public bool Unregister(string name, object target = null, GlobalNotificationDelegate action = null)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            lock (_locker)
            {
                if (action != null)
                {
                    return(_RemoveValue(name, target, action));
                }

                if (target != null)
                {
                    return(_RemoveKey(name, target));
                }

                return(_RemoveKey(name));
            }
        }
        public static void DispatcherRun(Dispatcher dispatcher, GlobalNotificationDelegate action, GlobalNotificationMessage msg)
        {
            GlobalNotificationDelegate func = new GlobalNotificationDelegate(action);

            dispatcher.BeginInvoke(func, msg);
        }