先把全部源码上传,只是一个Demo,希望大家指点一下不足之处,见本文底部。

1.设置界面

2.详情页面

好了,现在慢慢叙述里面的一些方法。

3.实现拷贝的方法:

(1) public static void LeftCopyRight(object left,  object right)
        {
            var Properties = left.GetType().GetProperties();
            foreach (var Propertie in Properties)
            {
                //循环遍历属性
                if (Propertie.CanRead && Propertie.CanWrite)
                {
                    //进行属性拷贝
                    Propertie.SetValue(left, Propertie.GetValue(right, null), null);
                }
            }
        }

CopyHelper.LeftCopyRight(run, (this.DataContext as SetWindowViewModel).Run);

(2)用json

this.Run = JsonConvert.DeserializeObject<BaseRunner>(JsonConvert.SerializeObject(run));

(3)书本上标准的序列化方法,这里不做介绍。

4.读取保存在本地json格式的配置文件

try
            {
                if (!File.Exists(JsonPath))  // 判断是否已有相同文件
                {
                    FileStream fs = new FileStream(JsonPath, FileMode.Create, FileAccess.ReadWrite);
                    fs.Close();
                }

localRuns = JsonConvert.DeserializeObject<List<BaseRunner>>(File.ReadAllText(JsonPath));
            }
            catch (Exception ex)
            {
                log.Fatal(ex);
            }

保存配置文件

try
            {
                File.WriteAllText(JsonPath, JsonConvert.SerializeObject(TaskRuns.Select(p => p as BaseRunner)));
            }
            catch (Exception ex)
            {
                log.Fatal(ex);
            }

文件位置 public static string JsonPath = System.AppDomain.CurrentDomain.BaseDirectory + "JobTasks.json";

5.里面一共添加了3个任务,使用反射的方法,需要添加新的任务,只需要按照Jobs下HelloJob建立任务即可。

然后在系统启动的时候把你的任务添加上。这里特别希望有个朋友指点一下,如何能够不用手动加的方法,如何将反射直接用在泛型方法上,这样启动就可自动启动了。

TaskRuns = new List<IRun>();
try
{
Assembly asm = Assembly.GetExecutingAssembly();
Type[] types = asm.GetTypes(); foreach (Type t in types)
{
if (new ArrayList(t.GetInterfaces()).Contains(typeof(IJob)))
{
IJob job = ObjectUtils.InstantiateType<IJob>(t);
if (job != null)
{
IRun run = null;
if (job is HelloJob)
{
run = new SimpleRunner<HelloJob>();
}
else if (job is HelloJob2)
{
run = new SimpleRunner<HelloJob2>();
}
else if (job is HelloJob3)
{
run = new SimpleRunner<HelloJob3>();
} if (run != null)
{
if (localRuns != null)
{
var localRun = localRuns.Where(p => p.Name == run.Name).FirstOrDefault();
if (localRun != null)
{
CopyHelper.LeftCopyRight(run, localRun);
}
}
if (run.TriggerState != TriggerState.Normal || run.Mode == Mode.Hand)
{
run.TriggerState = TriggerState.None;
}
run.CronSecondSet.Init();
run.CronMinuteSet.Init();
run.CronHourSet.Init();
run.CronDaySet.Init();
run.CronMonthSet.Init();
run.CronWeekSet.Init();
run.CronYearSet.Init();
run.LogOut = this.LogOut;
run.IsEdit = false;
TaskRuns.Add(run);
}
}
}
}
}
catch (Exception ex)
{
log.Fatal(ex);
}

6.Cron与DateTime互转

public class CronHelper
{
public static string DateTime2Cron(DateTime date)
{
return date.ToString("ss mm HH dd MM ? yyyy");
} public static DateTime Cron2DateTime(string cron)
{
return DateTime.ParseExact(cron, "ss mm HH dd MM ? yyyy", System.Globalization.CultureInfo.CurrentCulture);
} public static DateTimeOffset DateTime2DateTimeOffset(DateTime datetime)
{
return DateTime.SpecifyKind(datetime, DateTimeKind.Unspecified);
} public static DateTime DateTimeOffset2DateTime(DateTimeOffset datetimeoffset)
{
return datetimeoffset.DateTime;
}
}

CronHelper

最后,废话少说,上

链接:https://pan.baidu.com/s/1DpY8Tzwd1ggXVQkPH4bSlw
提取码:eon2

暂时永久有效,如果大家觉得不好,我将删除。

定时任务 Wpf.Quartz.Demo.3的更多相关文章

  1. 定时任务 Wpf.Quartz.Demo.4

    本文继续介绍定时任务 Wpf.Quartz.Demo.3的一些小细节, 代码也请前往第3节下载. 1.RichTextBox右键菜单 <RichTextBox.ContextMenu>   ...

  2. 定时任务 Wpf.Quartz.Demo.2

    定时任务 Wpf.Quartz.Demo.1已经能运行了,本节开始用wpf搭界面. 准备工作: 1.界面选择MahApp.Metro 在App.xaml添加资源 <Application.Res ...

  3. 定时任务 Wpf.Quartz.Demo.1

    Quartz 是个开源的作业调度框架. 安装:Install-Package Quartz 官网文档地址:https://www.quartz-scheduler.net/documentation/ ...

  4. 定时任务 Wpf.Quartz.Demo.5 (升级版)

    老规矩:先把全部源码上传,见本文底部. 相对于Demo3的区别,就是能自动加载继承了IJob的任务,任务主体程序分离. 在exe执行文件的同级下建一个MyJobs的文件夹,每次会自动扫描该文件夹下的J ...

  5. [转][JAVA]定时任务之-Quartz使用篇

    [BAT][JAVA]定时任务之-Quartz使用篇 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与 ...

  6. Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置 >>>>>>>>>>>>&g ...

  7. 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……

    过场CG:   接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...

  8. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  9. Spring 整合 Quartz 实现动态定时任务(附demo)

    最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...

随机推荐

  1. idea+tomcat 端口占用

    ntelliJ IDEA和Tomcat整合注意事项(转) 这两天一直在学习IDEA这个开发工具,今天再整合tomcat的时候遇到了问题,运行时总是报错,说是8080端口被占用,把我就搞的郁闷了,我就尝 ...

  2. spring学习 十三 注解AOP

    spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也 ...

  3. 《团队-爬取豆瓣电影TOP250-设计文档》

    搭建环境: 1.安装python3.4 2.安装pycharm集成开发环境 3.安装Git for Windows 4.安装python第三方包 bs4开发阶段: 1.团队成员申请并配置github账 ...

  4. 如何为终端用提供更快的解决方案?让IT技术员具备更高的效率?

  5. 数据分析处理库pandas及可视化库Matplotlib

    一.读取文件 1)读取文件内容 import pandas info = pandas.read_csv('1.csv',encoding='gbk') # 获取文件信息 print(info) pr ...

  6. 2019.01.26 codeforces 632E. Thief in a Shop(生成函数)

    传送门 题意简述:给nnn个物件,物件iii有一个权值aia_iai​,可以选任意多个.现在要求选出kkk个物件出来(允许重复)问最后得到的权值和的种类数. n,k,ai≤1000n,k,a_i\le ...

  7. warning: this decimal constant is unsigned only in ISO C90问题的处理及理解

    参考:https://blog.csdn.net/duguduchong/article/details/7709482 https://bbs.csdn.net/topics/391892978?p ...

  8. Android 从相机或相册或获取图片(转)

    参考: https://github.com/ASDbobo/GetPhotoDemo Android 8.0 调取系统摄像头和相册选择图片 9.3 使用Camera拍照

  9. php Amome框架 层次设计备注

    层次说明: 每一级中函数都是为而且只为  上(高)一层  的文件服务的 最底层: AmemoMySql   基础数据库函数:AmemoConfig  数据库信息配置文件  再高一层: 一个文件对应一个 ...

  10. IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (二)

    第二部分 邮件发送历史   一.第一封邮件   1.1969年10月,世界上的第一封电子邮件    1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短 ...