Exemplo n.º 1
0
 ReferenceHandle RegisterImpl(object recipient, string eventName, Action action, bool weakreference = false)
 {
     if (recipient == null)
     {
         throw new ArgumentNullException("recipient");
     }
     if (GetHolders <IHolder>(recipient, eventName).Any(x => x.IsSame(recipient, action)))
     {
         //イベント登録済み
         return(ReferenceHandle.Empty);
     }
     if (!weakreference)
     {
         var holder = new Holder
         {
             EventName = eventName,
             Recipient = new WeakReference <object>(recipient),
             Action    = action
         };
         m_Events.Add(holder);
         return(ReferenceHandle.Empty);
     }
     else
     {
         var holder = new WeakReferenceHolder
         {
             EventName = eventName,
             Recipient = new WeakReference <object>(recipient),
             Action    = new WeakReference <Action>(action)
         };
         var handle = new ReferenceHandle(action, holder);
         holder.Handle = new WeakReference <ReferenceHandle>(handle);
         m_Events.Add(holder);
         return(handle);
     }
 }
Exemplo n.º 2
0
 public override bool IsActive()
 {
     return(base.IsActive() && Action.TryGetTarget(out _) && ReferenceHandle.IsActive(Handle));
 }