分享一个以前封装的Quartz.net类。

新建一个QuartzClass类库项目。nuget控制台输入

image.png

添加Quartz.net的引用。
我们新建一个JobBase.cs文件,里面有一个Run方法。之后所有的Job都需继承这个基类,并实现Run方法。

  1. namespace LY.QuartzClass
  2. {
  3. public abstract class JobBase
  4. {
  5. public abstract void Run();
  6.  
  7. }
  8. }

之后新增一个JobInstance.cs类。这个类主要实现IJob接口。

  1. using Quartz;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. namespace LY.QuartzClass
  7. {
  8. public class JobInstance : IJob
  9. {
  10. public void Execute(IJobExecutionContext context)
  11. {
  12. IDictionary<string, object> jobs = context.JobDetail.JobDataMap;
  13. if (jobs != null)
  14. {
  15. foreach (var item in jobs.Values)
  16. {
  17. try
  18. {
  19. JobBase jobObj = item as JobBase;
  20. jobObj.Run();
  21. }
  22. catch
  23. {
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }

在JobInstance类的Execute方法中,我们从JobDataMap中取出JobBase实体,并执行Run方法。

下面我们新增一个JobManager.cs类,类内只有一个简单的AddJob方法

  1. using Quartz;
  2. using Quartz.Impl;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace LY.QuartzClass
  8. {
  9. public class JobManage
  10. {
  11. IScheduler schedudler;
  12. public JobManage()
  13. {
  14. schedudler = StdSchedulerFactory.GetDefaultScheduler();
  15. schedudler.Start();
  16. }
  17. public void AddJob<T>(int Second) where T : JobBase
  18. {
  19.  
  20. JobBase jbobj = Activator.CreateInstance<T>();
  21. IDictionary<string, object> jbData = new Dictionary<string, object>();
  22. jbData.Add("name", jbobj);
  23.  
  24. IJobDetail job1 = JobBuilder.Create<JobInstance>()
  25. .SetJobData(new JobDataMap(jbData)).Build();
  26.  
  27. ITrigger trigger1 = TriggerBuilder.Create()
  28. .StartNow()
  29. .WithSimpleSchedule(x => x.WithIntervalInSeconds(Second)
  30. .RepeatForever()).Build();
  31.  
  32. schedudler.ScheduleJob(job1, trigger1);
  33.  
  34. }
  35.  
  36. public void AddJob<T>(string rule) where T : JobBase
  37. {
  38. JobBase jbInstance = Activator.CreateInstance<T>();
  39. IDictionary<string, object> jbData = new Dictionary<string, object>();
  40. jbData.Add("name", jbInstance);
  41.  
  42. IJobDetail job1 = JobBuilder.Create<JobInstance>()
  43. .SetJobData(new JobDataMap(jbData)).Build();
  44.  
  45. ITrigger trigger1 = TriggerBuilder.Create()
  46. .StartNow()
  47. .WithCronSchedule(rule).Build();
  48.  
  49. schedudler.ScheduleJob(job1, trigger1);
  50. }
  51. }
  52. }

在AddJob时,将Job传入JobData中。

下面我们进行调用Test。
新建一个窗体项目,并添加对LY.QuartzClass项目的引用。
新增三个Job类,继承自JobBase

  1. public class FirstJob : JobBase
  2. {
  3. public override void Run()
  4. {
  5. Console.WriteLine(DateTime.Now.ToString());
  6. }
  7. }
  1. public class SecondJob : JobBase
  2. {
  3. public override void Run()
  4. {
  5. Console.WriteLine(DateTime.Now.ToString() + ":Hello");
  6. }
  7. }
  1. public class ThirdJob : JobBase
  2. {
  3. public override void Run()
  4. {
  5. Console.WriteLine(DateTime.Now.ToString() + ":CronTest");
  6. }
  7. }

在窗体中进行调用

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. JobManage job = new JobManage();
  4. job.AddJob<FirstJob>();
  5. job.AddJob<SecondJob>();
  6. job.AddJob<ThirdJob>("0/5 0-58 9 * * ?");
  7. }

结果如下:

 
image.png

c# Quartz.net的简单封装的更多相关文章

  1. quartz.net插件类库封装(含源码)

    1.前言 目录: 1.quartz.net任务调度:源码及使用文档 2.quartz.net插件类库封装 最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵 ...

  2. Quartz.Net 组件的封装使用Quartz.AspNetCore

    Quartz.Net 组件的封装使用 Quartz.Net是面向.NET的一款功能齐全的开源作业调度组件,你可以把它嵌入你的系统中实现作业调度,也可以基于Quartz.Net开发一套完整的作业调度系统 ...

  3. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  4. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  5. Android--Retrofit+RxJava的简单封装(三)

    1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...

  6. okhttp3 get post 简单封装

    最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...

  7. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

  8. 对pymysql的简单封装

    #coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...

  9. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

随机推荐

  1. Spring Boot启动流程详解

    注:本文转自http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow 环境 本文基于Spring Boot版本1.3.3, 使用了sp ...

  2. 在EXCEL中使用SQL语句查询

    SQL语句在数据库使用中十分重要. 在EXCEL中可以不打开工作簿,就获取数据,对多工作簿操作很用,也很快. 对大量数据处理,比循环快很多,但是比词典方法还有点距离(可惜我还没有学会词典). 对数据库 ...

  3. OrderedDict 有序字典以及读取json串时如何保持原有顺序

    1. OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序.比较时,OrderedDict要内容和顺序完全相同才会视为相等 import collectio ...

  4. iOS开发基础控件--UISegmentedControl

    UISegmentedControl全局外观设置 分段控件是我们常用的控件之一,今天把具体用法总结了下: 1.初始化UISegmentedControl [plain] view plaincopy ...

  5. dev GridControl显示标题

    gridview:ShowViewCaption = TrueViewCation = "32435354354"

  6. (转)libvirt API的基本概念

    本文摘自:http://blog.sina.com.cn/s/blog_da4487c40102v31i.html libvirt对象 libvirt的对象向外展现了虚拟化环境的所有资源.libvir ...

  7. Makefile 自动搜索 c 和 cpp 文件, 并生成 .a 静态库文件

    最近 又弄linux 下的 .a 静态库编译, 于是想 做个 一劳永逸的Makefile, 经过一番折腾, 最后成功了 只需要 改两个 参数 就可以执行了(MYLIB 和 VPATH), 代码 如下: ...

  8. Nginx源码完全注释(8)ngx_errno.c

    errno.h中的strerror(int errno)可以确定指定的errno的错误的提示信息.在 Nginx 中,将所有错误提示信息预先存储在一个数组里,而预先确定这个数组的大小,是在自动化脚本中 ...

  9. Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题

    在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识.   这个标识在Java读取文件的时候,不会被去掉,而且Stri ...

  10. Madgwick算法详细解读

    Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...