/// <summary>
		/// Initializes a new instance of <see cref="DelayedEventPublisher"/>.
		/// </summary>
		/// <param name="realEventHandler">The event handler which will be called when the timeout has elapsed.</param>
		/// <param name="timeoutMilliseconds">The timeout period, in milliseconds, for triggering the real event handler. The default is 350 ms.</param>
		/// <param name="trigger">Specifies when the real event handler is called after a period of inactivity, or periodically after the last event was raised. The default is to trigger on inactivity.</param>
		internal DelayedEventPublisherBase(EventHandler realEventHandler, int timeoutMilliseconds = DefaultTimeout, DelayedEventPublisherTriggerMode trigger = DefaultTrigger)
		{
			Platform.CheckForNullReference(realEventHandler, "realEventHandler");
			Platform.CheckPositive(timeoutMilliseconds, "timeoutMilliseconds");

			_realEventHandler = realEventHandler;
			_timeoutMilliseconds = Math.Max(10, timeoutMilliseconds);
			_trigger = trigger;

			_timer = new Timer(OnTimer) {IntervalMilliseconds = 10};
		}
        /// <summary>
        /// Initializes a new instance of <see cref="DelayedEventPublisher"/>.
        /// </summary>
        /// <param name="realEventHandler">The event handler which will be called when the timeout has elapsed.</param>
        /// <param name="timeoutMilliseconds">The timeout period, in milliseconds, for triggering the real event handler. The default is 350 ms.</param>
        /// <param name="trigger">Specifies when the real event handler is called after a period of inactivity, or periodically after the last event was raised. The default is to trigger on inactivity.</param>
        internal DelayedEventPublisherBase(EventHandler realEventHandler, int timeoutMilliseconds = DefaultTimeout, DelayedEventPublisherTriggerMode trigger = DefaultTrigger)
        {
            Platform.CheckForNullReference(realEventHandler, "realEventHandler");
            Platform.CheckPositive(timeoutMilliseconds, "timeoutMilliseconds");

            _realEventHandler    = realEventHandler;
            _timeoutMilliseconds = Math.Max(10, timeoutMilliseconds);
            _trigger             = trigger;

            _timer = new Timer(OnTimer);
            _timer.IntervalMilliseconds = 10;
        }
 /// <summary>
 /// Initializes a new instance of <see cref="DelayedEventPublisher"/>.
 /// </summary>
 /// <param name="realEventHandler">The event handler which will be called when the timeout has elapsed.</param>
 /// <param name="timeoutMilliseconds">The timeout period, in milliseconds, for triggering the real event handler. The default is 350 ms.</param>
 /// <param name="trigger">Specifies when the real event handler is called after a period of inactivity, or periodically after the last event was raised. The default is to trigger on inactivity.</param>
 public DelayedEventPublisher(EventHandler realEventHandler, int timeoutMilliseconds = DefaultTimeout, DelayedEventPublisherTriggerMode trigger = DefaultTrigger)
     : base(realEventHandler, timeoutMilliseconds, trigger)
 {
 }
		/// <summary>
		/// Initializes a new instance of <see cref="DelayedEventPublisher"/>.
		/// </summary>
		/// <param name="realEventHandler">The event handler which will be called when the timeout has elapsed.</param>
		/// <param name="timeoutMilliseconds">The timeout period, in milliseconds, for triggering the real event handler. The default is 350 ms.</param>
		/// <param name="trigger">Specifies when the real event handler is called after a period of inactivity, or periodically after the last event was raised. The default is to trigger on inactivity.</param>
		public DelayedEventPublisher(EventHandler realEventHandler, int timeoutMilliseconds = DefaultTimeout, DelayedEventPublisherTriggerMode trigger = DefaultTrigger)
			: base(realEventHandler, timeoutMilliseconds, trigger) {}