首页 > 解决方案 > 如何在 WPF 项目中将 Quartz 配置保存到文件中?

问题描述

我正在构建一个 WPF 应用程序,它允许用户在日历中创建提醒,并且对于每个提醒,用户可以设置名称、注释、日期、警报以及是否/警报应该重复的频率、打盹时间、自动关闭、类型...的提醒。

阅读后似乎最好的主意是使用调度程序,我使用 Quartz.Net (3.0.7)

使用下面的代码,我可以从文件加载作业和触发器,并启动调度程序。但是,以这种方式处理储蓄真的可靠吗?

我读到在 Quartz 中处理“保存”的方式是通过 JobStoe,使用 ADO.NET,但这对我来说实现起来似乎很复杂,我想知道是否有一种更简单的方法来保存我不知道的数据'没看到?

基本上我只想将我所有的提醒保存到一个像 json 文件这样的文件中,这样我就可以获得与关闭之前相同的应用程序状态。

public class QuartzDynamicTest
    {
        public List<JobsAndTriggers> LstobjJobsAndTriggers { get; set; }

        public QuartzDynamicTest()
        {
            // LstobjJobsAndTriggers would be loaded from a repository:
            // Every time a user creates a nex reminder a new JobsAndTriggers is added to the list, and CreateAllJobsAndTriggers would be called
            LstobjJobsAndTriggers = new List<JobsAndTriggers>();
            LstobjJobsAndTriggers.Add(new JobsAndTriggers { jobIdentityKey = "JOB1", TriggerIdentityKey = "TRIGGER1", jobData_MethodName = "JOB1_METHOD()", ScheduleIntervalInSec = 5 });
            LstobjJobsAndTriggers.Add(new JobsAndTriggers { jobIdentityKey = "JOB2", TriggerIdentityKey = "TRIGGER2", jobData_MethodName = "JOB2_METHOD()", ScheduleIntervalInSec = 10 });        

            CreateAllJobsAndTriggers(LstobjJobsAndTriggers).GetAwaiter().GetResult();
        }

        public static async Task CreateAllJobsAndTriggers(List<JobsAndTriggers> lstJobsAndTriggers)

        {
            IScheduler scheduler;
            IJobDetail job = null;
            ITrigger trigger = null;

            var schedulerFactory = new StdSchedulerFactory();
            scheduler = schedulerFactory.GetScheduler().Result;
            scheduler.Start().Wait();


            foreach (var JobandTrigger in lstJobsAndTriggers)
            {              

                JobKey jobKey = JobKey.Create(JobandTrigger.jobIdentityKey);

                job = JobBuilder.Create<DemoJob1>().
                   WithIdentity(jobKey)
                   .UsingJobData("MethodName", JobandTrigger.jobData_MethodName)
                   .Build();

                trigger = TriggerBuilder.Create()
                .WithIdentity(JobandTrigger.TriggerIdentityKey)
                .StartNow()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(JobandTrigger.ScheduleIntervalInSec).WithRepeatCount(1)              
                )
                .Build();

                await scheduler.ScheduleJob(job, trigger);               
            }
            // Save infos about scheduler...?
        }

    }

标签: wpfquartz.net

解决方案


推荐阅读