定时任务 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,以后争取用一下网上的统一管理定时任务的源码,学习一下。