1.目录

[Scheduled Timer]第一回:Scheduled Timer介绍

[Scheduled Timer]第二回:时间调度

[Scheduled Timer]第三回:事件存储(EventStorage)

[Scheduled Timer]第四回:事件过滤(EventFilter)

[Scheduled Timer]第五回:任务方法(MethodCall)

[Scheduled Timer]第六回:定时器作业(TimerJob)

[Scheduled Timer]第七回:ScheduleTimer

2.类图

部分类图如下,不是全部,点击每个图片上的类图名称可以跳转到相关的介绍。

Timer介绍,请点击 ScheduleTimer介绍,请点击 EventStory介绍,请点击 EventStory介绍,请点击 Job介绍,请点击 Job介绍,请点击 Filter介绍,请点击 Filter介绍,请点击 ScheduleTime介绍,请点击 ScheduleTime介绍,请点击 ScheduleTime介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击 Method介绍,请点击

 

3.使用示例

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();
        }

4.总结

Scheduled Timer的介绍基本结束,Scheduled Timer向我们展示了它对定时器的封装思路和实现方法。通过对Scheduled Timer学习,自己对定时器作业的封装有了一些思路同时也学到了一些新知识点,大家想封装定时器,可以参考,下载源码。

posted on 2012-09-26 09:00  Qlin  阅读(1483)  评论(0编辑  收藏  举报