I have UI program. Workflow is
- Click the button to install and start window service
- When window service is running, I click 'Add Schedule' button to add schedule to quartz
- If window service is started or stopped then quartz is also started or stoped
I writed code like below. But it's not working.(_scheduler is null when call AddSchedule method in ServiceManager class)
namespace CodeSamples
{
class ServiceManager : ServiceBase
{
private static StdSchedulerFactory _factory;
private static IScheduler _scheduler;
private static readonly string _groupName = "Test";
static ServiceManager()
{
}
protected override async void Start(string[] args)
{
NameValueCollection properties = new NameValueCollection
{
["quartz.jobStore.misfireThreshold"] = "5000", // 5 sec
["quartz.jobStore.type"] = "Quartz.Simpl.RAMJobStore"
};
_factory = new StdSchedulerFactory(properties);
_scheduler = await _factory.GetScheduler();
await _scheduler.Start();
}
protected override void Stop()
{
await _scheduler.Shutdown(false);
}
// Called from form class like
// CodeSamples.ServiceManager.AddSchedule<TestQuartz_1>("TEST");
public static async void AddSchedule<T>(string name) where T : IJob
{
IJobDetail job = JobBuilder.Create<T>()
.WithIdentity(name, _groupName)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity($"trg_{name}", _groupName)
.StartNow()
.WithSimpleSchedule(s => s
.WithIntervalInSeconds(1)
.RepeatForever()
.WithMisfireHandlingInstructionIgnoreMisfires())
.Build();
// _scheduler is null when btnAddSchedule_Click event
await _scheduler.ScheduleJob(job, trigger);
}
}
}