internal EventDispatcher(EventDispatcher next, bool[] eventEnabled, EventListener listener)
 {
     m_Next = next;
     m_EventEnabled = eventEnabled;
     m_Listener = listener;
 }
 // Helper used by code:EventListener.AddEventSource and code:EventListener.EventListener
 // when a listener gets attached to a eventSource
 internal void AddListener(EventListener listener)
 {
     lock (EventListener.EventListenersLock)
     {
         bool[] enabledArray = null;
         if (m_eventData != null)
             enabledArray = new bool[m_eventData.Length];
         m_Dispatchers = new EventDispatcher(m_Dispatchers, enabledArray, listener);
         listener.OnEventSourceCreated(this);
     }
 }
 internal EventCommandEventArgs(EventCommand command, IDictionary<string, string> arguments, EventSource eventSource, EventDispatcher dispatcher)
 {
     this.Command = command;
     this.Arguments = arguments;
     this.eventSource = eventSource;
     this.dispatcher = dispatcher;
 }
        /// <summary>
        /// If 'value is 'true' then set the eventSource so that 'dispatcher' will recieve event with the eventId
        /// of 'eventId.  If value is 'false' disable the event for that dispatcher.   If 'eventId' is out of
        /// range return false, otherwise true.  
        /// </summary>
        internal bool EnableEventForDispatcher(EventDispatcher dispatcher, int eventId, bool value)
        {
            if (dispatcher == null)
            {
                if (eventId >= m_eventData.Length)
                    return false;

                if (m_provider != null)
                    m_eventData[eventId].EnabledForETW = value;
            }
            else
            {
                if (eventId >= dispatcher.m_EventEnabled.Length)
                    return false;
                dispatcher.m_EventEnabled[eventId] = value;
                if (value)
                    m_eventData[eventId].EnabledForAnyListener = true;
            }
            return true;
        }