public void Dispose() { _isDisposed = true; ++SourceId; _registeredCount = 0; Unlink(); // In case Dispose is called from a callback. if (!_isInvoking) { _isInvoking = true; for (int i = 0, max = _registeredCallbacks.Count; i < max; ++i) { RegisteredDelegate del = _registeredCallbacks[i]; _registeredCallbacks[i] = default(RegisteredDelegate); if (del.callback != null) { del.callback.Dispose(); } } _registeredCallbacks.Clear(); _isInvoking = false; } if (_retainCounter == 0) { ResetAndRepool(); } }
protected virtual void OnRegistered(PlayerCacheAndHistory playerevents) { RegisteredDelegate handler = Registered; if (handler != null) { handler(playerevents); } }
public void RegisterDelegate(string name, RegisteredDelegate inDelegate) { // if the name is alerady registered, add this delegate to the array of delegates associated with that name if (registeredDelegatesByName.ContainsKey(name)) { List <RegisteredDelegate> associatedDelegates; if (registeredDelegatesByName.TryGetValue(name, out associatedDelegates)) { associatedDelegates.Add(inDelegate); registeredDelegatesByName [name] = associatedDelegates; } } // if the name is not already registered, make a new key with it, an add the associated delegate else { List <RegisteredDelegate> associatedDelegates = new List <RegisteredDelegate> (); associatedDelegates.Add(inDelegate); registeredDelegatesByName.Add(name, associatedDelegates); } }
public bool TryUnregister(ushort tokenId, uint order) { int index = IndexOf(order); if (tokenId == TokenId & index >= 0) { RegisteredDelegate del = _registeredCallbacks[index]; if (!_isInvoking) { _registeredCallbacks.RemoveAt(index); del.callback.Dispose(); return(true); } if (del.callback != null) { _registeredCallbacks[index] = new RegisteredDelegate(del.order); del.callback.Dispose(); return(true); } } return(false); }
private void InvokeCallbacks() { // Retain in case this is disposed while executing callbacks. RetainInternal(); _isInvoking = true; Unlink(); List <Exception> exceptions = null; for (int i = 0, max = _registeredCallbacks.Count; i < max; ++i) { RegisteredDelegate del = _registeredCallbacks[i]; _registeredCallbacks[i] = default(RegisteredDelegate); if (del.callback != null) { try { del.callback.Invoke(ValueContainer); } catch (Exception e) { if (exceptions == null) { exceptions = new List <Exception>(); } exceptions.Add(e); } } } _registeredCallbacks.Clear(); _isInvoking = false; ReleaseInternal(); if (exceptions != null) { // Propagate exceptions to caller as aggregate. throw new AggregateException(exceptions); } }