Как сохранить конфигурацию Quartz в файл в проекте WPF? - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю приложение 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...?
        }

    }
...