[Scheduled Timer]第一回:Scheduled Timer介绍
[Scheduled Timer]第三回:事件存储(EventStorage)
[Scheduled Timer]第四回:事件过滤(EventFilter)
[Scheduled Timer]第五回:任务方法(MethodCall)
[Scheduled Timer]第六回:定时器作业(TimerJob)
[Scheduled Timer]第七回:ScheduleTimer
部分类图如下,不是全部,点击每个图片上的类图名称可以跳转到相关的介绍。
Scheduled Timer部分功能使用示例,代码中有注释。
public static void TimerTest() { DateTime now = DateTime.Now; Action<string, DateTime> d = (out1, time) => { DateTime actual = DateTime.Now; Console.WriteLine("{0} - {1} = {2} Msg:{3}", actual, time, (actual - time).TotalMilliseconds, out1); }; ScheduleTimer _Timer = new ScheduleTimer(); IScheduledItem item; //事件持久化 _Timer.EventStorage = new FileEventStorage("time1LastTime", "http://www.cnblogs.com/TimerTaskStorage.xml"); //清楚任务 _Timer.ClearJobs(); //定时器暂停 _Timer.Stop(); //2004-01-01 00:00:00 执行一次,只执行一次 item = new SingleEvent(new DateTime(2004, 1, 1)); _Timer.AddAsyncJob(item, d, "one"); //每隔 2分钟 执行一次,循环执行 item = new SimpleInterval(now, new TimeSpan(0, 2, 0)); _Timer.AddAsyncJob(item, d, "cycle"); //每秒钟的第6毫秒执行 item = new ScheduledTime(EventTimeUnit.ByMinute, new TimeSpan(0, 0, 0, 0, 6)); _Timer.AddAsyncJob(item, d, "cycle"); //每分钟的第6秒执行 item = new ScheduledTime(EventTimeUnit.ByMinute, new TimeSpan(0, 0, 6)); _Timer.AddAsyncJob(item, d, "cycle"); //每个小时的第6分钟执行 item = new ScheduledTime(EventTimeUnit.Hourly, new TimeSpan(0, 6, 0)); _Timer.AddAsyncJob(item, d, "cycle"); //每天早上6点执行 item = new ScheduledTime(EventTimeUnit.Daily, new TimeSpan(6, 0, 0)); _Timer.AddAsyncJob(item, d, "cycle"); //每周二早上6点执行,算法:星期天+具体时间 item = new ScheduledTime(EventTimeUnit.Weekly, new TimeSpan(2, 6, 0, 0, 0)); _Timer.AddAsyncJob(item, d, "cycle"); //每月的3号早上6点执行,算法:每月的1号+具体时间 item = new ScheduledTime(EventTimeUnit.Monthly, new TimeSpan(2, 6, 0, 0, 0)); _Timer.AddAsyncJob(item, d, "cycle"); //每天在 早上6点至下午5点之间每隔15分钟循环执行 item = new Schedule.BlockWrapper( new SimpleInterval(DateTime.Parse("1/01/2004"), TimeSpan.FromMinutes(15)), "Daily", "6:00 AM", "5:00 PM"); _Timer.AddJob(item, d, "cycle"); //异步任务 //添加异常处理事件 _Timer.Error += (object sender, ExceptionEventArgs Args) => { Console.WriteLine(Args.EventTime); Console.WriteLine(Args.Error.Message); Console.WriteLine(Args.Error.StackTrace); }; //定时器启动 _Timer.Start(); }
Scheduled Timer的介绍基本结束,Scheduled Timer向我们展示了它对定时器的封装思路和实现方法。通过对Scheduled Timer学习,自己对定时器作业的封装有了一些思路同时也学到了一些新知识点,大家想封装定时器,可以参考,下载源码。