/// <summary>
 /// This method fires an event to all parties that have registered with the ServiceEvent
 /// </summary>
 /// <param name="theEvent">The ServiceEvent Type to fire</param>
 /// <param name="e">The ServiceEventArgs object to pass</param>
 public virtual void ProcessEvent(ServiceEvent theEvent, ServiceEventArgs e)
 {
     ProcessEvent(theEvent, rootClass, e);
 }
        /// <summary>
        /// This method fires an event to all parties that have registered with the ServiceEvent
        /// </summary>
        /// <param name="theEvent">The ServiceEvent Type to fire</param>
        /// <param name="sender">The sended object to pass</param>
        /// <param name="e">The ServiceEventArgs object to pass</param>
        public virtual void ProcessEvent(ServiceEvent theEvent, object sender, ServiceEventArgs e)
        {
            //Check whether anyone is attached to the event
            if (theEvent == null)
                return;

            foreach (ServiceEvent te in theEvent.GetInvocationList())
            {
                te(sender, e);
            }
        }
		/// <summary>
		/// This method fires an event to all parties that have registered with the ServiceEvent
		/// </summary>
		/// <param name="theEvent">The ServiceEvent Type to fire</param>
		/// <param name="e">The ServiceEventArgs object to pass</param>
		protected virtual void ProcessEvent(ServiceEvent theEvent, ServiceEventArgs e)
		{
			ProcessEvent(theEvent,this,e);
		}