这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟。每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间。双击dgv就查看内容。

如果每天计划重复,也可已保存计划,使用json序列化保存,然后加载任务的时候,选择文件加载,比较任务的时间如果小于当前的年月日,就把年月日替换为当前的,小时和分钟时间保留。

点击了执行任务之后,就用quartz.net的api,支持多个任务提醒。

删除任务也会把计划里的job删除掉的。

写这个也是突发奇想,也算是小小的了解了一下定时任务的用法了。

这个定时任务 有几个对象比较重要:Schedule、IJob、 Triggler。

IJob就是你要执行的任务,里面有个方法,用来执行任务的,这个方法有个参数,任务上下文,可以把需要执行的数据通过这个上下文对象传递的执行方法里来执行。

触发器就是定义任务在什么时候,任务的执行频次 的数据,这个任务和触发器是要关联起来,统一交给 schedule管理。

详细的,等需要深入了解的时候在去学吧。

执行的代码:

隐藏

  1.    IDictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>> jobAndTriger = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
  2.  
  3.  
  4.    foreach (var p in listP)
  5.    {
  6.        var name = p.Ptime.ToString("yyyyMMddHHmmssff");
  7.        int hour = p.Ptime.Hour;
  8.        int m = p.Ptime.Minute;
  9.  
  10.        var job = JobBuilder.Create<Plan>()
  11.       .WithIdentity(name, "group1") // name "myJob", group "group1"
  12.       .Build();
  13.        job.JobDataMap.Add(name, p);
  14.  
  15.        ITrigger t = TriggerBuilder.Create()
  16. .WithIdentity("myTrigger"+ name)
  17. .ForJob(name)
  18. .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour,m)) // execute job daily at 9:30
  19. .ModifiedByCalendar("PlanDay") // but not on holidays
  20. .Build();
  21.  
  22.        Quartz.Collection.ISet<ITrigger> set =new Quartz.Collection.HashSet<ITrigger>();
  23.        set.Add(t);
  24.        jobAndTriger.Add(job, set);
  25.    }

窗体之间数据传递数据,用了事件。

隐藏

  1. public
    class Plan:IJob
  2.     {
  3.         public DateTime Ptime { get; set; }
  4.  
  5.         public
    string PTitle { get; set; }
  6.         public
    string pDetail { get; set; }
  7.         public
    bool PIsFinish { get; set; }
  8.  
  9.        public
    event Action<Plan> action;
  10.  
  11.         public
    void Execute(IJobExecutionContext context)
  12.         {
  13.             var val = context.JobDetail.JobDataMap.Values;
  14.             foreach (var item in val)
  15.             {
  16.                 ((Plan)item).action?.Invoke((Plan)item);
  17.             }
  18.  
  19.         }
  20.     }

如果感兴趣可以下载源码:

链接:https://pan.baidu.com/s/1y1ijav_7HfrjQXSu57DtCQ

提取码:1234

复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V3的分享

使用quartz.net 完成一个winform版的任务提醒工具的更多相关文章

  1. 用C#开发一个WinForm版的批量图片压缩工具

    我们在实际项目开发过程中,曾经遇到过一个需求,就是要开发一个对大量图片进行整理(删除掉一些不符合要求的图片).归类(根据格式进行分类,比如jpg格式.bmp格式等).压缩(因为有的图片很大很占空间,看 ...

  2. 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)

    汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai Python3 与 C# 基础语法对比:https://www.cnblogs.com/ ...

  3. 实现一个简易版的vuex持久化工具

    背景 最近用uni-app开发小程序项目时,部分需要持久化的内容直接使用vue中的持久化插件貌似不太行,所以想着自己实现一下类似vuex-persistedstate插件的功能,想着功能不多,代码量应 ...

  4. C# Winform版批量压缩图片程序

    需求 上周,领导给我分配了一个需求:服务器上的图片文件非常大,每天要用掉两个G的大小的空间,要做一个自动压缩图片的工具处理这些大图片.领导的思路是这样的: 1)打开一个图片,看它的属性里面象素是多少, ...

  5. RDIFramework.NET V3.3 WinForm版角色授权管理新增角色对操作权限项、模块起止生效日期的设置

    在实际应用在我们可能会有这样的需求,某个操作权限项(按钮)或菜单在某个时间范围内可以让指定角色访问.此时通过我们的角色权限扩展设置就可以办到. 在我们框架V3.3 WinForm版全新增加了角色权限扩 ...

  6. 任务驱动,Winform VS WEB对比式学习.NET开发系列第一篇------身份证解析(不断更新的WEB版本及Winform版本源码)

    一 本系列培训随笔适用人群 1. 软件开发初学者 2. 有志于转向Web开发的Winform程序员 3. 想了解桌面应用开发的Web程序员 二 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分 ...

  7. 任务驱动,对比式学习.NET开发系列之开篇------开源2个小框架(一个Winform框架,一个Web框架)

    一 源码位置 1. Winform框架 2. web框架 二 高效学习编程的办法 1 任务驱动方式学习软件开发 大部分人学习软件开发技术是通过看书,看视频,听老师上课的方式.这些方式有一个共同点即按知 ...

  8. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  9. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

随机推荐

  1. Win7下安装IIS

    安装IIS 1.控制面板 --> 程序 --> 卸载程序,进入"程序与功能". 2.进入"打开或关闭Window功能". 3.找到"Int ...

  2. Leetcode 30 串联所有单词的子串 滑动窗口+map

    见注释.滑动窗口还是好用. class Solution { public: vector<int> findSubstring(string s, vector<string> ...

  3. zoj-3870 (二进制)

    For an upcoming programming contest, Edward, the headmaster of Marjar University, is forming a two-m ...

  4. 容器之List接口下各实现类(Vector,ArrayList 和LinkedList)的线程安全问题

    Vector .ArrayList 和LinkedList都是List接口下的实现类,但是他们之间的区别和联系是什么呢? 首先: 然后: 如果您仅仅想知道结论,那么可以关闭了. 下面我讨论讨论为什么. ...

  5. Ubuntu下跑通py-faster-rcnn、详解demo运作流程

    在不同的服务器不同的机器上做过很多次实验,分别遇到各种不一样的错误并且跑通Py-Faster-RCNN,因此,在这里做一个流程的汇总: 一.下载文件: 首先,文件的下载可以有两种途径: 1.需要在官网 ...

  6. js function All In One

    js function All In One js ES5 Function & js Arrow Function Object vs Array 花括号 ?对象 , 傻傻分不清 // ar ...

  7. 微信公众号代码高亮美化工具 All In One

    微信公众号代码高亮美化工具 All In One markdown 美化 mdnice 编辑器 https://www.mdnice.com/ https://github.com/mdnice ma ...

  8. React Hooks vs React Class vs React Function All In One

    React Hooks vs React Class vs React Function All In One React Component Types React Hooks Component ...

  9. free online linux terminal & github cli online

    free online linux terminal & github cli online gitpod https://www.gitpod.io/features/ https://bc ...

  10. react 异步的setState

    import React from "react"; class App extends React.Component { state = { a: 0 }; component ...