PDA

View Full Version : کسی با Quartz.net کار کرده ؟



Developer Programmer
سه شنبه 20 اسفند 1392, 10:47 صبح
یه برنامه نوشتم که کاربر، Job ها رو براساس زمان دلخواه ایجاد میکنه. لیست Job ها در CheckedBoxList نشون داده میشه تا کاربر بتونه اونها رو Resume و Pause کنه.


http://up.parsipet.ir/uploads/Capture_a0dd0.jpg


Job ها بدون نقص کار میکنن منتها بعد از اجرای دستتور Pause یا Resume ، دیگه فعال نمیشن.


public void Run()
{
#region task

var scheduler = Scheduler.GetScheduler();
scheduler.Start();

IJobDetail job = JobBuilder.Create<Jobs>()
.WithIdentity("Job" + Convert.ToString(chkJobs.Items.Count + 1), "Group1")
.UsingJobData("OperationType", cmbOperationType.SelectedIndex.ToString())
.UsingJobData("OperationValue", txtOperationValue.Text.Trim())
.Build();

ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("Trigger" + Convert.ToString(chkJobs.Items.Count + 1), "Group1")
.WithCronSchedule(upSecond.Value.ToString() + " " + upMinute.Value.ToString() + " " + upHour.Value.ToString() + " ?" + " *" + " *")
.ForJob(job.Key)
.Build();

scheduler.ScheduleJob(job, trigger);

# endregion

chkJobs.Items.Add(job.Key, true);
}



public class Jobs : IJob
{
public void Execute(IJobExecutionContext context)
{
JobDataMap datamap = context.JobDetail.JobDataMap;
switch (Convert.ToInt32(datamap.GetString("OperationType")))
{
case 1:
MessageBox.Show(datamap.GetString("OperationValue"));
break;
}

}
}
}


بعد از اجرای این Event ، دیگه Job ها فعال نمیشن:

private void chkJobs_ItemCheck(object sender, ItemCheckEventArgs e)
{
int index = e.Index;
var sch = Scheduler.GetScheduler();
foreach (object item in chkJobs.Items)
{
JobKey key = (JobKey)item;

if (e.NewValue == CheckState.Unchecked)
{
sch.PauseJob(key);
}
else
{
sch.ResumeJob(key);
}
}
}