CK.Core.ActivityMonitorBridgeTarget.AddCallback C# (CSharp) Method

AddCallback() private method

Called by ActivityMonitorBridge.SetMonitor (the reentrant check is acquired).
private AddCallback ( IActivityMonitorBridgeCallback callback ) : void
callback IActivityMonitorBridgeCallback
return void
        internal void AddCallback( IActivityMonitorBridgeCallback callback )
        {
            Debug.Assert( Array.IndexOf( _callbacks, callback ) < 0 );
            Util.InterlockedAdd( ref _callbacks, callback );
        }

Usage Example

 /// <summary>
 /// forceBuggyRemove is not used here since this client is not lockable.
 /// </summary>
 void IActivityMonitorBoundClient.SetMonitor(Impl.IActivityMonitorImpl source, bool forceBuggyRemove)
 {
     if (source != null && _source != null)
     {
         throw ActivityMonitorClient.CreateMultipleRegisterOnBoundClientException(this);
     }
     if (_source != null)
     {
         _bridgeTarget.RemoveCallback(this);
         // Unregistering.
         for (int i = 0; i < _openedGroups.Count; ++i)
         {
             if (_openedGroups[i])
             {
                 _targetMonitor.CloseGroup(new ActivityLogGroupConclusion(ActivityMonitorResources.ClosedByBridgeRemoved, TagBridgePrematureClose));
             }
         }
         _openedGroups.Clear();
     }
     else
     {
         _bridgeTarget.AddCallback(this);
         _targetActualFilter = _bridgeTarget.TargetFinalFilter;
         if (_pullTargetTopicAndAutoTagsFromTarget)
         {
             source.InitializeTopicAndAutoTags(this._targetMonitor.Topic, _targetMonitor.AutoTags);
         }
     }
     _source = source;
     Interlocked.MemoryBarrier();
 }