private void SendInner(Type senderType, Type argsType, string messsage, object sender, object args) { MessageExpressItem key = new MessageExpressItem(senderType, argsType, messsage); if (_dictCallback.ContainsKey(key)) { List <Tuple <WeakReference, Action <object, object> > > list = _dictCallback[key]; foreach (Tuple <WeakReference, Action <object, object> > item in list) { if (item.Item1.IsAlive) { item.Item2(sender, args); } } } }
private void RegisterInner(Type senderType, Type argsType, string messsage, object subcriber, Action <object, object> callback) { MessageExpressItem key = new MessageExpressItem(senderType, argsType, messsage); Tuple <WeakReference, Action <object, object> > value = new Tuple <WeakReference, Action <object, object> >(new WeakReference(subcriber), callback); if (_dictCallback.ContainsKey(key)) { _dictCallback[key].Add(value); } else { List <Tuple <WeakReference, Action <object, object> > > list = new List <Tuple <WeakReference, Action <object, object> > > { value }; _dictCallback[key] = list; } }
private void UnRegisterInner(Type senderType, Type argsType, string messsage, object subcriber) { MessageExpressItem key = new MessageExpressItem(senderType, argsType, messsage); if (_dictCallback.ContainsKey(key)) { _ = _dictCallback[key].RemoveAll((match) => { if (match.Item1.IsAlive) { return(match.Item1.Target == subcriber); } return(true); }); } List <Tuple <WeakReference, Action <object, object> > > list = _dictCallback[key]; if (list.Count > 0) { _ = _dictCallback.Remove(key); } }