示例#1
0
        public ThreadPoolTimer(TimerElapsedHandler handler, TimeSpan period, TimerDestroyedHandler destroyed)
        {
            _handler = handler;
            _destroyed = destroyed;

            newTimer = new DispatcherTimer();

            // timer interval specified as 1 second
            newTimer.Interval = TimeSpan.FromSeconds(1);
            // Sub-routine OnTimerTick will be called at every 1 second
            newTimer.Tick += delegate(object sender, EventArgs args) { _handler(this); };
            // starting the timer
            newTimer.Start();
        }
示例#2
0
        internal ThreadPoolTimer(TimerElapsedHandler handler, TimeSpan?period = null, TimeSpan?delay = null, TimerDestroyedHandler destroyed = null)
        {
            _timer = new Timer(_ =>
            {
                if (!_cts.IsCancellationRequested)
                {
                    handler.Invoke(this);
                }
            });

            _destroyed = destroyed;

            _timer.Change(
                period: period ?? global::System.Threading.Timeout.InfiniteTimeSpan,
                dueTime: delay ?? global::System.Threading.Timeout.InfiniteTimeSpan
                );
        }
示例#3
0
 public static ThreadPoolTimer CreateTimer(TimerElapsedHandler handler, TimeSpan delay, TimerDestroyedHandler destroyed)
 => new ThreadPoolTimer(handler, delay: delay, destroyed: destroyed);
示例#4
0
 public static ThreadPoolTimer CreatePeriodicTimer(TimerElapsedHandler handler, TimeSpan period, TimerDestroyedHandler destroyed)
 => new ThreadPoolTimer(handler, period: period, destroyed: destroyed);
示例#5
0
 public TimerHandler(TimerElapsedHandler handler, TimeSpan period, TimerDestroyedHandler destroyed)
 {
     _periodicTimer = ThreadPoolTimer.CreatePeriodicTimer(handler, period, destroyed);
 }
示例#6
0
 public static ThreadPoolTimer CreatePeriodicTimer(TimerElapsedHandler handler, TimeSpan period, TimerDestroyedHandler destroyed)
 {
     return  new ThreadPoolTimer(handler,period,destroyed);
 }
示例#7
0
		private ThreadPoolTimer(TimerElapsedHandler handler, TimerDestroyedHandler destroyed, TimeSpan delay, bool isPeriodic)
		{
			Delay = delay;
			if (isPeriodic)
				Period = delay;
			this.isPeriodic = isPeriodic;

			this.handler = handler;
			this.destroyed = destroyed;

			this.realTimer = new Timer(t =>
			{
				var ltimer = (ThreadPoolTimer)t;

				lock (ltimer)
				{
					if (ltimer.isCanceled)
						return;
					ltimer.isRunning = true;
				}

				Task.Factory.StartNew(o =>
				{
					ThreadPoolTimer taskedTimer = (ThreadPoolTimer)o;
					try
					{
						taskedTimer.handler(taskedTimer);
					}
					finally
					{
						lock (ltimer)
						{
							taskedTimer.isRunning = false;
							if (!taskedTimer.isPeriodic || taskedTimer.isCanceled)
								ltimer.Cancel();
						}
					}
				}, ltimer);
			}, this, (int)delay.TotalMilliseconds, (isPeriodic) ? (int)delay.TotalMilliseconds : Timeout.Infinite);
		}
示例#8
0
		/// <summary>
		/// Creates a single-use timer and specifies a method to call after the timer is complete.
		/// The timer is complete when the timer has expired and the final call to handler has finished.
		/// </summary>
		/// <param name="handler">The method to call when the timer expires.</param>
		/// <param name="delay">The number of milliseconds until the timer expires.</param>
		/// <param name="destroyed">The method to call after the timer is complete.</param>
		/// <returns>An instance of a single-use timer.</returns>
		public static ThreadPoolTimer CreateTimer(TimerElapsedHandler handler, TimeSpan delay, TimerDestroyedHandler destroyed)
		{
			if (handler == null)
				throw new ArgumentException("handler");

			return new ThreadPoolTimer(handler, destroyed, delay, isPeriodic: false);
		}