国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

windows 服務實現定時任務調度(Quartz.Net)

2019-11-17 01:36:01
字體:
來源:轉載
供稿:網友

windows 服務實現定時任務調度(Quartz.Net)

我們通常在一些情況下需要軟件具有一個自動執行某些任務的功能,但是又不希望直接啟動軟件,或者每次都要手動的來啟動軟件,這時我們可可以考慮到windows服務了。

首先創建一個windows服務項目(詳細信息請參閱:C#創建Windows Service(Windows 服務)基礎教程

    

在創建好的項目中點擊“單擊此處切換到代碼視圖”切換到代碼

我們主要關注一下兩個方法:

  • OnStart – 控制服務啟動  • OnStop – 控制服務停止

  例:

 1     public partial class Service1 : ServiceBase 2     { 3         public Service1() 4         { 5             InitializeComponent(); 6         } 7  8         PRotected override void OnStart(string[] args) 9         {10             //todo:這里是服務啟動所執行的代碼11         }12 13         protected override void OnStop()14         {15             //todo:這里是服務停止所執行的代碼16         }17     }
View Code

下面我們可以寫一個定時任務的功能了:

  

 1      private void StartDoSomething() 2         { 3             System.Timers.Timer timer = new System.Timers.Timer(10000); //間隔10秒 4             timer.AutoReset = true; 5             timer.Enabled = false;  //執行一次 6             timer.Elapsed += new ElapsedEventHandler(ExecutionCode); 7             timer.Start(); 8         } 9 10         private void ExecutionCode(object source, System.Timers.ElapsedEventArgs e)11         {12             string dtNow = DateTime.Now.ToString("HH:mm");13             if (dtNow == "12:00")14             {15                 File.WriteAllText("D:/ExecutionService.txt", "服務執行了一次任務", Encoding.UTF8);16             }17         }

然后在OnStart的方法中調用上面的StartDoSomething的方法

1         protected override void OnStart(string[] args)2         {3             StartDoSomething();4         }    

以上就可以算是一個簡單的定時執行任務的windows服務了,可是在這里并不完善,在服務中使用Timer并不好,所以我們可以使用Quartz.Net來實現任務調度功能。

首先來介紹一下Quartz.Net這個框架:

  簡介:Quartz.Net是一個開源的任務調度框架,非常強大,能夠通過簡單的配置幫助我們定時具體的操作。相對于我們用的線程里面while(true)然后sleep來執行某個操作,應該算的上是高端,大氣,上檔次了。目前最新版本是2.2,新的版本里面有些方法名發生了變化,從之前的版本用過來的人應該會有體會.這里我使用最常用,也是最穩定的方式--Windows服務里面使用Quartz.net,并且使用配置的方式來設置觸發器。(以上內容摘自網絡)

  簡單的理解就是它能夠幫我們定時的做事,相當于鬧鐘能夠叫我們起床一樣。

  目前最新的版本是Quartz.NET 2.2.3大家可以在這里下載

  現在我們需要在剛剛創建的服務項目中引用如下文件:

    

  在配置文件中寫好自己的配置(本例子演示定時訪問指定網站)

 1 <?xml version="1.0"?> 2 <configuration> 3   <configSections> 4     <sectionGroup name="JobList"> 5       <section name="Job" type="MyService1101.MyConfigHandler,MyService1101"/> 6     </sectionGroup> 7   </configSections> 8   <startup> 9     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />10   </startup>11   <JobList>12     <Job>   <!--這里是一個任務節點-->13       <add key="Url" value="http://www.baidu.com" />  <!--需要訪問的Url-->14       <add key="Hour" value="10" />   <!--開始時間小時,注意:這里的小時為0-23,如果是1點的話就是1,而不是01-->15       <add key="Minute" value="30"/>    <!--開始時間分鐘,注意:同上0-59-->16     </Job>17   </JobList>18 </configuration>
View Code

  新建一個MyConfigHandler.cs類來讀取自定義配置節點

 1 public class MyConfigHandler : IConfigurationSectionHandler 2     { 3         public MyConfigHandler() 4         { 5         } 6  7         public object Create(object parent, object configContext, System.Xml.XmlNode section) 8         { 9             NameValueCollection configs;10             NameValueSectionHandler baseHandler = new NameValueSectionHandler();11             configs = (NameValueCollection)baseHandler.Create(parent, configContext, section);12             return configs;13         }14     }
View Code

  然后新建一個SystemScheduler類來創建調度程序

 1     public class SystemScheduler 2     { 3         private SystemScheduler() 4         { 5         } 6  7         public static SystemScheduler CreateInstance() 8         { 9             return new SystemScheduler();10         }11 12         private IScheduler _scheduler;13 14         public void StartScheduler()15         {16             //這里讀取配置文件中的任務開始時間17             int hour = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Hour"]);18             int minute = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Minute"]);19 20             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//內存調度21             _scheduler = schedulerFactory.GetScheduler();22 23             //創建一個Job來執行特定的任務24             IJobDetail synchronousData = new JobDetailImpl("SynchronousData", typeof(SynchronousData));25             //創建并定義觸發器的規則(每天執行一次時間為:時:分)26             ITrigger trigger =27                 TriggerBuilder.Create()28                     .WithDailyTimeIntervalSchedule(29                         a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(hour, minute))).Build();30             //將創建好的任務和觸發規則加入到Quartz中31             _scheduler.ScheduleJob(synchronousData, trigger);32             //開始33             _scheduler.Start();34         }35 36         public void StopScheduler()37         {38             _scheduler.Shutdown();39         }40     }
View Code

  新建一個SynchronousData類,讓其實現IJob接口來實現SystemScheduler中自定義的任務

 1     public class SynchronousData : IJob 2     { 3         public void Execute(IJobExecutionContext context) 4            { 5             string Url = ((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Url"]; 6             WebClient wc = new WebClient(); 7             WebRequest wr = WebRequest.Create(new Uri(Url)); 8             using (StreamWriter sw = File.AppendText(@"d:/SchedulerService.txt")) 9             {10                 sw.WriteLine("------------------" + "MyService服務在:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "     執行了一次任務" + "------------------");11                 sw.Flush();12             }13         }14     }
View Code

  最后在OnStart中添加對這個調度程序的應用

1         protected override void OnStart(string[] args)2         {3             SystemScheduler _systemScheduler = Sys
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汪清县| 呼伦贝尔市| 昆明市| 肥城市| 吴堡县| 宿松县| 耿马| 南漳县| 梅河口市| 历史| 大化| 赤峰市| 响水县| 揭阳市| 星座| 阿拉善右旗| 长汀县| 崇明县| 合阳县| 冀州市| 沙湾县| 晋江市| 涞源县| 河南省| 丽水市| 石阡县| 榆树市| 宜宾市| 青龙| 长治市| 海城市| 长乐市| 九台市| 永修县| 乐清市| 遂川县| 聊城市| 纳雍县| 西充县| 新晃| 佳木斯市|