示例#1
0
	public static Action Add(Action callback)
	{
		//if we already have it, just use what we have (but increment timesAdded so we know how many Remove() calls are needed)
		for(int n = 0; n<_listeners.Count; n++)
		{
			Action dele = (_listeners[n].weakRef.Target as Action);

			if(dele == callback)
			{
				_listeners[n].timesAdded++;
				return _listeners[n].InnerCallback;
			}
		}

		//create a new listener
		RXWeakListener listener = new RXWeakListener();
		listener.weakRef = new WeakReference(callback);
		_listeners.Add(listener);
		return listener.InnerCallback;
	}
示例#2
0
    public static Action Add(Action callback)
    {
        //if we already have it, just use what we have (but increment timesAdded so we know how many Remove() calls are needed)
        for (int n = 0; n < _listeners.Count; n++)
        {
            Action dele = (_listeners[n].weakRef.Target as Action);

            if (dele == callback)
            {
                _listeners[n].timesAdded++;
                return(_listeners[n].InnerCallback);
            }
        }

        //create a new listener
        RXWeakListener listener = new RXWeakListener();

        listener.weakRef = new WeakReference(callback);
        _listeners.Add(listener);
        return(listener.InnerCallback);
    }
示例#3
0
    public static Action Remove(Action callback)
    {
        for (int n = 0; n < _listeners.Count; n++)
        {
            Action dele = (_listeners[n].weakRef.Target as Action);

            if (dele == callback)
            {
                RXWeakListener listener = _listeners[n];

                listener.timesAdded--;

                if (listener.timesAdded <= 0)
                {
                    _listeners.RemoveAt(n);
                }

                return(listener.InnerCallback);
            }
        }
        return(null);        //this shouldn't ever really happen unless someone removes more listeners than they add
    }