示例#1
0
        /// <summary>
        /// 创建计时器实例
        /// </summary>
        /// <param name="dueTime">调用 Elapsed 之前延迟的时间量,指定 -1 毫秒以防止启动计时器。指定零 (0) 可立即启动计时器。</param>
        /// <param name="interval">调用 Elapsed 的时间间隔,指定-1毫秒可以禁止触发事件Elapsed</param>
        /// <param name="arg">传递给Elapsed事件的参数</param>
        /// <param name="containerOwner">管理计时器的容器,null引用意味着在当前线程触发此计时器。默认值为null</param>
        public Timer(TimeSpan dueTime, TimeSpan interval, object arg, ITimerContainerOwner containerOwner = null)
        {
            this.containerOwner = containerOwner;
            if (containerOwner != null && containerOwner.TimerContainer != null)
                containerOwner.TimerContainer.AddTimer(this);
            else
                dispatcher = Dispatcher.CurrentDispatcher;

            timer = new System.Threading.Timer(timerCallback, arg, dueTime, interval);
        }
示例#2
0
 /// <summary>
 /// 创建一个计时器,在每天的某个时间点触发事件Elapsed
 /// </summary>
 /// <param name="hour">指定的时间点,取值范围0到23</param>
 /// <param name="arg">传递给事件Elapsed的参数</param>
 /// <param name="containerOwner">管理计时器的容器,null引用意味着在当前线程触发此计时器。默认值为null</param>
 /// <returns>一个计时器,在每天的由参数hour指定的时间点触发事件Elapsed</returns>
 public static Timer CreateByHourInEveryDay(float hour, object arg, ITimerContainerOwner containerOwner = null)
 {
     if (hour < 0.0f || hour >= 24.0f)
         throw new ArgumentOutOfRangeException("hour", "参数hour必须在0到24之间(不包括24)");
     var now = DateTime.Now;
     DateTime nextElapsedTime = new DateTime(now.Year, now.Month, now.Day, 0, 0, 0) + TimeSpan.FromHours(hour);
     TimeSpan intervalTimeSpan;
     if (now <= nextElapsedTime) // 如果当前时间还没到当天的这个时间点,直接减就是间隔了,否则要用转天的时间来减
         intervalTimeSpan = nextElapsedTime - now;
     else
         intervalTimeSpan = nextElapsedTime + TimeSpan.FromDays(1) - now;
     return new Timer(intervalTimeSpan, TimeSpan.FromDays(1), arg, containerOwner);
 }
示例#3
0
 /// <summary>
 /// 创建计时器实例
 /// </summary>
 /// <param name="dueTime">调用 Elapsed 之前延迟的时间量(以毫秒为单位)</param>
 /// <param name="interval">调用 Elapsed 的时间间隔(以毫秒为单位),指定 System.Threading.Timeout.Infinite(等价与-1)可以禁止触发事件Elapsed</param>
 /// <param name="arg">传递给Elapsed事件的参数</param>
 /// <param name="containerOwner">管理计时器的容器,null引用意味着在当前线程触发此计时器。默认值为null</param>
 public Timer(long dueTime, long interval, object arg, ITimerContainerOwner containerOwner = null)
     : this(TimeSpan.FromMilliseconds(dueTime), TimeSpan.FromMilliseconds(interval), arg, containerOwner)
 {
 }
示例#4
0
 public static Timer CreateInvokeOnce(TimeSpan dueTime, object arg, ITimerContainerOwner containerOwner = null)
 {
     return new Timer(dueTime, TimeSpan.FromMilliseconds(Timeout.Infinite), arg, containerOwner);
 }
示例#5
0
 public static Timer CreateInvokeOnce(long dueTime, object arg, ITimerContainerOwner containerOwner = null)
 {
     return new Timer(dueTime, Timeout.Infinite, arg, containerOwner);
 }
示例#6
0
 /// <summary>
 /// 创建一个计时器,在某一时间为起始,每经过一个时间间隔触发事件Elapsed
 /// </summary>
 /// <param name="startTime">起始时间</param>
 /// <param name="interval">时间间隔</param>
 /// <param name="arg">传递给事件Elapsed的参数</param>
 /// <param name="containerOwner">管理计时器的容器,null引用意味着在当前线程触发此计时器。默认值为null</param>
 /// <returns>一个计时器,在参数startTime指定的起始时间每经过由参数interval指定的时间间隔后触发事件Elapsed</returns>
 public static Timer CreateByStartTimeAndInterval(DateTime startTime, TimeSpan interval, object arg, ITimerContainerOwner containerOwner = null)
 {
     DateTime now = DateTime.Now;
     long chushu = (long)((now - startTime).TotalMilliseconds / interval.TotalMilliseconds);
     DateTime nextElapsedTime = startTime + TimeSpan.FromMilliseconds((chushu + 1) * interval.TotalMilliseconds);
     return new Timer(nextElapsedTime - now, interval, arg, containerOwner);
 }