定时任务 winform开发

  在项目中我们经常遇到与时间结合的无限或者有限轮回的任务。例如每月一号统计工作量,基本这种情况,都会是设置定时任务,定时执行。好了,下面就记录一下定时任务的开发吧。

  首先描述一下开发思路:

  建立一个winform控制台程序,手动触发定时任务的开始,然后执行。项目中需要引用的dll:

好了,开始上代码:

    public class QuartRunner
    {
       

        /// 
        /// 调度器工厂
        /// 
        ISchedulerFactory factory;
        /// 
        /// 调度器
        /// 
        public static IScheduler scheduler;

        /// 
        /// 输出任务情况
        /// 
        public static Form1 msgInfos = new Form1();

        #region  方法

        public QuartRunner(Form1 from)
        {
          
            from = msgInfos;
        }

        /// 
        /// 定时任务开启
        /// 
        public void Start()
        {
          
            factory = new StdSchedulerFactory();
            scheduler = factory.GetScheduler();
            Rank("0 25 13 ? * *");
            LookContractLog(1);

        }
      //指定时间点触发任务
        public void Rank(string cronExpression)
        {
            IJobDetail job = JobBuilder.Create().Build();
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                .WithCronSchedule(cronExpression)
                .Build();
            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
        }
        //每几分钟跑一次服务
        public void LookContractLog(int minutes)
        {
            IJobDetail job = JobBuilder.Create().Build();
            ITrigger trigger = TriggerBuilder.Create()
                 .StartNow()
                 .WithSimpleSchedule(x => x.WithIntervalInMinutes(minutes).RepeatForever())
                 .Build();
            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
        }


        #endregion



        #region  定时任务参考参数

        /***定点任务执行
               * 0 0 12 * * ? 每天12点触发 
               0 15 10 ? * * 每天10点15分触发 
               0 15 10 * * ? 每天10点15分触发 
               0 15 10 * * ? * 每天10点15分触发 
               0 15 10 * * ? 2005 2005年每天10点15分触发 
               0 * 14 * * ? 每天下午的 2点到2点59分每分触发 
               0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 
               0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发) 
               0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发 
               0 10,44 14 ? 3 WED     3月分每周三下午的 2点10分和2点44分触发 (特殊情况,在一个时间设置里,执行两次或两次以上的情况) 
               0 59 2 ? * FRI    每周5凌晨2点59分触发; 
               0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发 
               0 15 10 15 * ? 每月15号上午10点15分触发 
               0 15 10 L * ? 每月最后一天的10点15分触发 
               0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发 
               0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发 
               0 15 10 ? * 6#3 每月的第三周的星期五开始触发 
               0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次 
               0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

   **/

        #endregion
    }

上面的两个细节类(RankQuartz,LookContractQuartz),下面展示一个代码:主要是继承IJob类,并且重写方法Execute

 public class RankQuartz : IJob
    {


        public RankQuartz()
        {
           
        }

        public void Execute(IJobExecutionContext context)
        {
            try
            {
              
                 //具体细节的处理
            }
            catch (Exception ex)
            {
                _Logger.Logger_Info($"{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")}:执行排行活动任务时,出现问题:{ex.Message} ");
            }
        }
}



想要调用,就直接实例化QuartRunner类就可以了

 以上,over,以后争取用一下网上的统一管理定时任务的源码,学习一下。

 

posted @ 2018-11-17 10:03  keke..lele  阅读(3556)  评论(0编辑  收藏  举报