上一篇寫(xiě)到的使用windows任務(wù)計劃程序來(lái)實(shí)現定時(shí)任務(wù),但這種方式在開(kāi)發(fā)過(guò)程中不是太靈活,很難滿(mǎn)足我們時(shí)需時(shí)用;所以我們如果能在代碼中來(lái)實(shí)現的話(huà)就會(huì )比較得心應手;
所以這篇來(lái)簡(jiǎn)單介紹下Quartz.Net這個(gè)任務(wù)調度系統的使用方式。

實(shí)現功能:
使用Quartz.Net實(shí)現定時(shí)、定點(diǎn)觸發(fā)
開(kāi)發(fā)環(huán)境:
開(kāi)發(fā)工具:Visual Studio 2013
.NET Framework版本:4.5
實(shí)現代碼:
//首先需要先去從nuget下載Quartz引用到我們的項目//實(shí)現IInterruptableJob接口,實(shí)現我們需要操作的邏輯public class MyJob : IInterruptableJob{public void Execute(IJobExecutionContext context){JobDataMap dataMap = context.JobDetail.JobDataMap;string tag = dataMap.GetString("tag");Form1.form1.AddText(tag+"-------"+DateTime.Now);}public void Interrupt(){throw new NotImplementedException();}}
public static void StartJob(){//創(chuàng )建任務(wù)調度器ISchedulerFactory schedulefactory = new StdSchedulerFactory();IScheduler scheduler = schedulefactory.GetScheduler();//啟動(dòng)任務(wù)調度器scheduler.Start();//創(chuàng )建任務(wù)作業(yè)//指定時(shí)間觸發(fā)IJobDetail jobDetail = JobBuilder.Create<MyJob>().UsingJobData("tag", "jobDetail").Build();//間隔時(shí)間觸發(fā)IJobDetail jobDetail2 = JobBuilder.Create<MyJob>().UsingJobData("tag", "jobDetail2").Build();//創(chuàng )建觸發(fā)器DateTime dt = DateTime.Now.AddSeconds(10);//指定時(shí)間觸發(fā)//表達式含義可參考:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.htmlstring t = string.Join(" ", dt.Second, dt.Minute, dt.Hour, dt.Day, dt.Month, "?", dt.Year);var cronTrigger = TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.CronSchedule(t).InTimeZone(TimeZoneInfo.Local)).Build();//間隔時(shí)間段觸發(fā)//WithRepeatCount表示重復的次數,第一次執行不算重復次數,所以最終執行次數為設置的重復次數+1var cronTrigger2 =TriggerBuilder.Create().WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(3)).Build();IDictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>> dic = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();dic.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger> { cronTrigger });dic.Add(jobDetail2, new Quartz.Collection.HashSet<ITrigger> { cronTrigger2 });//把作業(yè),觸發(fā)器加入調度器scheduler.ScheduleJobs(dic, true);}//最后調用StartJob方法即可private void btnQuartz_Click(object sender, EventArgs e){StartJob();}
實(shí)現效果:

我這里用winform來(lái)做這個(gè)測試,當然我認為這并不太合適。
此篇只是介紹了下Quartz.Net簡(jiǎn)單的使用方法,還有其他更高級的功能大家可以去官網(wǎng)自行學(xué)習。
由簡(jiǎn)入繁,拿來(lái)即用
聯(lián)系客服