官方学习文档:http://www.quartz-scheduler.net/documentation/index.html

官方的源代码下载:http://sourceforge.net/projects/quartznet/files/quartznet/

nuget安装包地址:  https://www.nuget.org/packages/Quartz/

不会写cron可以自动生成   http://cron.qqe2.com/

在程序包管理器控制台  输入Install-Package Quartz -Version 3.0.6

倒包

下面是调度的实例部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace ConsoleApp3
{
   public class Scheduler
    {
        private static IScheduler scheduler;
        public static  IScheduler Current
        {
            get
            {
                if (scheduler==null)
                {
                    scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;
                }
                return scheduler;
            }
        }

        /// <summary>
        /// 启动程序
        /// </summary>
        public  void Start()
        {
            Current.Start();
            task();
        }

        /// <summary>
        /// 停止程序
        /// </summary>
        public void Stop()
        {
            Current.Shutdown();
        }

        /// <summary>
        /// 重启程序
        /// </summary>
        public void Restart()
        {
            Current.Shutdown();
            scheduler = null;
            Current.Start();
        }

        /// <summary>
        /// 任务
        /// </summary>
        public void task()
        {
            Job<ORders>("order", "0/1 * * * * ? ");//corn规则
        }

        /// <summary>
        /// 初始化任务
        /// </summary>
        public void Job<T>(string uid, string cronExpression)where T : IJob
        {
           //初始化创建作业
            var jobuilder = JobBuilder.Create<T>();//约束类型为 Ijob
            //根据ID 标识触发器 构建调度
             var job=   jobuilder.WithIdentity(uid, uid).Build();

            var cron = (ICronTrigger)TriggerBuilder.Create() //初始化触发器
                                            .WithIdentity("trigger" + uid, "group" + uid)//标识触发器
                                            .StartNow()//触发第一次运行
                                            .WithCronSchedule(cronExpression)//触发规则
                                            .Build();//构建调度
            //将创建的类线程和规则关联
            Current.ScheduleJob(job, cron);
        }
    }
}

要每秒执行的调度方法  Execute 去实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Quartz;

namespace ConsoleApp3
{
    public class ORders : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Task task = null;
            Console.WriteLine("wewr");
            return task;
        }

    }
}

接着使用Topshelf 创建Windows 服务

官网  http://topshelf-project.com/

git  http://github.com/topshelf/Topshelf/downloads

在 nuget 搜索 Topshelf 包

在包管理工具中安装  输入Install-Package Topshelf -Version 4.0.4.161-develop

也可以 加日志   Install-Package Topshelf.Log4Net

官网给的例子 http://docs.topshelf-project.com/en/latest/configuration/quickstart.html

通过下面的实例安装服务

using System;
using Topshelf;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                HostFactory.Run(x =>
                {
                    x.Service<give>(s =>
                    {
                        s.ConstructUsing(name => new give());
                        s.WhenStarted(tc => tc.Start());
                        s.WhenStopped(tc => tc.Stop());

                    });
                    x.RunAsLocalSystem();
                    x.SetDescription("测试服务");//服务描述
                    x.SetDisplayName("Test.y");//显示服务名
                    x.SetServiceName("Test.y");//服务名称
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("服务启动失败,原因:{0}", ex.ToString()));
            }

            new Scheduler().Start();
            Console.ReadKey();
        }
    }

    /// <summary>
    /// 服务要跑的内容
    /// </summary>
    class give
    {
        public void Start()
        {
            try
            {
               new Scheduler().Start();//调度启动方法
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            Console.WriteLine("执行Start方法,启动成功");
        }
        public void Stop()
        {
        }
    }
}

下面我们制作安装服务bat 文件

@echo off

rem 安装Windows服务
E:\Service\bin\Release\ConsoleApp3.exe install

rem 启动服务
E:\Service\bin\Release\ConsoleApp3.exe start

@echo on

pause

卸载服务

@echo off

rem 卸载Windows服务
E:\Service\bin\Release\ConsoleApp3.exe
uninstall @echo on pause

未完待续。。。

C# QuartZ使用实例写成服务的更多相关文章

  1. MongoDB 多实例安装成服务

    转发自:https://www.cnblogs.com/GainLoss/p/6906937.html 1.在mongodb的官网上下载安装包 https://www.mongodb.com/down ...

  2. WCF 项目应用连载[3] - 双向通信 实例管理与服务端监控

    WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 第二节我们已经创建了Lig项目,并且能稳定工作了.现在我们来改进ILigAgent接口,实现WCF的双向通 ...

  3. 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  4. windows下安装Redis并部署成服务

    windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...

  5. 不用写Windows服务实现定时器功能(FluentScheduler )

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  6. MongoDB的安装和配置成服务的三种方法和一些难点

    1. Hotfix KB2731284 or later update is not installed的问题: If you are running any edition of Windows S ...

  7. PHPCMS v9构建模块 - 实例之企业服务模块

    下面开始第一个实例,企业服务模块,这是个比较简单的模块,做一个抛砖的作用.   模块功能分析:企业服务,企业填写招聘申请表,管理审核之后,展示作为招聘通知的功能.   ■1.文件分布 modules文 ...

  8. 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)

    游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...

  9. Windows 程序注册成服务的方法

    Windows 程序注册成服务的方法 将windows 程序注册成服务这个是很多后台程序需要实现的功能,注册成服务后,你的程序就可以像windows 服务一样随系统启动,并且隐藏你的控制台界面.下面介 ...

随机推荐

  1. 安装php7.2并且整合nginx且分开部署

    1.安装php 7.2 2.php配置 3.nginx配置 4.测试 5.报错与解决 6.利用upstream实现负载均衡 1.安装php 7.2 启动容器: liwangdeMacBook-Air: ...

  2. JQuery对checkbox的操作

    对复选框组的全选.全不选.不全选,获取选中的复选框的值的操作 点击全选按钮,复选框组全部选中或者全部取消. 实现全选按钮和复选框组的联动,当复选框组中有一个没有被选中后,那么id=‘checkedAl ...

  3. Nginx+Tomcat反向代理利用certbot实现https

    一.利用Let's Encrypt 免费生成HTTPS证书 1.下载安装certbot(Let's Encrypt ) 2.利用certbot生成证书 3.配置nginx的https证书 安装cerb ...

  4. google guava Multimap的学习介绍

    1.https://blog.csdn.net/gongxinju/article/details/53634434

  5. [UWP]在UWP平台中使用Lottie动画

    最近QQ影音久违的更新了,因为记得QQ影音之前体验还算不错(FFmepg的事另说),我也第一时间去官网下载体验了一下,结果发现一些有趣的事情. 是的,你没看错,QQ影音主界面上这个动画效果是使用Lot ...

  6. Swift5 语言指南(十五) 继承

    类可以从另一个类继承方法,属性和其他特性.当一个类继承自另一个类时,继承类称为子类,它继承的类称为其超类.继承是一种基本行为,它将类与Swift中的其他类型区分开来. Swift中的类可以调用和访问属 ...

  7. linux 软件安装篇

    在linux下安装软件,不像windows一样,下一步下一步安装,但是也有很方便的方式.也有自定义的安装方式,总体来说,套路还不算太深,但是要实践才能出真知哦! linux版本有很多,但是大部分命令都 ...

  8. Spring Boot读取配置的 5 种方式

    读取application文件 在application.yml或者properties文件中添加: info.address=USA info.company=Spring info.degree= ...

  9. SOA和微服务架构的区别

    微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...

  10. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...