定時任務 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,以后爭取用一下網上的統一管理定時任務的源碼,學習一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM