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