zoukankan      html  css  js  c++  java
  • Quartz.Net

    windows 服务实现定时任务调度(Quartz.Net)

    我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了。

    首先创建一个windows服务项目(详细信息请参阅:C#创建Windows Service(Windows 服务)基础教程

        

    在创建好的项目中点击“单击此处切换到代码视图”切换到代码

    我们主要关注一下两个方法:

      • OnStart – 控制服务启动
      • OnStop – 控制服务停止

      例:

     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 大家可以在这里下载

      现在我们需要在刚刚创建的服务项目中引用如下文件:

        

      在配置文件中写好自己的配置(本例子演示定时访问指定网站)

     View Code

      新建一个MyConfigHandler.cs类来读取自定义配置节点

     View Code

      然后新建一个SystemScheduler类来创建调度程序

     View Code

      新建一个SynchronousData类,让其实现IJob接口来实现SystemScheduler中自定义的任务

     View Code

      最后在OnStart中添加对这个调度程序的应用

    1         protected override void OnStart(string[] args)
    2         {
    3             SystemScheduler _systemScheduler = SystemScheduler.CreateInstance();
    4             _systemScheduler.StartScheduler();
    5         }   

      程序生成后我们可以通过指令安装它

      安装完成后在服务中会有一个新的服务项

      

      程序运行过后会在D:盘生成一个SchedulerService.txt文件

      

      本程序源码:下载

     
     
    分类: C#
  • 相关阅读:
    C#如何不使用递归实现无限层次结构的代码分享[转]
    asp.net mvc2 templates的一篇文章
    asp.net mvc Model验证总结及常用正则表达式
    关于IE的Ajax请求结果缓存的问题
    在ASP.NET MVC中如何让ASCX用户控件具有Action / Controller
    Kubernetes之Pod介绍
    Docker 之Swarm介绍
    Docker之多机网络
    Kubernetes之Pod调度
    Docker之隔离技术
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3803928.html
Copyright © 2011-2022 走看看