0

私は Quartz.net を初めて使用します。タスクをスケジュールする単純なウィンドウ ベースのアプリケーションを構築したいと考えています。開始時刻と終了時刻の 4 つのタスクがあるとします。

Breakfast ; 8:00;8:30
Lunch;13:00;13:30
dinner;19:30;20:00

午前 8 時にボタンをクリックすると、「朝食が開始されました!!!」というメッセージ ボックスが表示されます。午前 8 時 30 分に再びメッセージ ボックスが表示され、「Breakfast end!!!」というテキストが表示されます。等々。

私はチュートリアルを終えました。しかし、進むべき道を混乱させます。誰でも私を助けることができますか?

編集

これに 1 つのジョブと 1 つのトリガーを使用することは可能ですか?

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();


                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    string[] strArr = Regex.Split(listBox1.Items[i].ToString(), @";", RegexOptions.Multiline);
                    // define the job and tie it to our HelloJob class
                    IJobDetail jobStart = JobBuilder.Create<HelloJob>()
        .WithIdentity("job" + i, "group1") // name "myJob", group "group1"
        .StoreDurably()
        .UsingJobData("jobSays", strArr[0].ToUpper().Trim() + " " + "starts")
        .Build();

                    string[] ArrStart = strArr[1].Trim().Split(':');

                    ITrigger triggerstart = TriggerBuilder.Create()
                        .WithIdentity("trigger" + i, "group1")

.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(Convert.ToInt32(ArrStart[0]), Convert.ToInt32(ArrStart[1])))
                        // .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()


                                    .ForJob(jobStart)
                                .Build();
                    // .WithSchedule(CronScheduleBuilder.CronSchedule("0 4 06 1/1 * ? *"))

                    // Tell quartz to schedule the job using our trigger
                    scheduler.ScheduleJob(jobStart, triggerstart);
                    scheduler.Start();
                    string[] Arrend = strArr[2].Trim().Split(':');
                    IJobDetail jobend = JobBuilder.Create<HelloJob>()
        .WithIdentity("job1" + i, "group1")
        .StoreDurably()
        .UsingJobData("jobSays", strArr[0].ToUpper().Trim() + " " + "end")
        .Build();

                    ITrigger triggerend = TriggerBuilder.Create()
                        .WithIdentity("trigger1" + i, "group1")

.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(Convert.ToInt32(Arrend[0]), Convert.ToInt32(Arrend[1])))
                        // .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()


                                    .ForJob(jobend)
                                .Build();


                    scheduler.ScheduleJob(jobend, triggerend);
                    scheduler.Start();
                }


            }
            catch (SchedulerException se)
            {
                Console.WriteLine("Scheduler Exception : " + se);
            }
        }
        public class HelloJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                JobKey key = context.JobDetail.Key;
                JobDataMap dataMap = context.JobDetail.JobDataMap;
                string jobSays = dataMap.GetString("jobSays");
                MessageBox.Show(jobSays);
            }
        }
4

1 に答える 1

0

次のようにジョブをスケジュールし、この簡単な例を使用できます。

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

        IJobDetail job = JobBuilder.Create<MealAlertJob>()
            .WithIdentity("mealJob", "mealJobGroup")
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("breakfastStartTrigger", "mealTriggerGroup")
                    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))
                    .ForJob(job)
                    .Build();

        ITrigger trigger1 = TriggerBuilder.Create()
                    .WithIdentity("breakfastEndTrigger", "mealTriggerGroup")
                    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 30))
                    .ForJob(job)
                    .Build();


        scheduler.ScheduleJob(job, trigger);
        scheduler.ScheduleJob(trigger1);

        scheduler.Start();

ジョブ クラスの「実行」メソッドにロジック (メッセージ ボックスを表示するなど) を実装する必要があります。ジョブに複数のトリガーを定義すると、複数回実行されます。たとえば「MealAlertJob」などのジョブ クラスでは、時刻を確認し、それに基づいてアラートを表示できます。上記の例では、他の 4 つの時間 (ランチの開始/終了とディナーの開始/終了) にさらにトリガーを追加できます。

public class MealAlertJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        var now = DateTime.Now;
        var hour = now.Hour;
        var minute = now.Minute;

        if (hour == 8 && minute == 0)
            System.Windows.Forms.MessageBox.Show("Breakfast started!!!");

        //and so on....
    }
}

またはこのようなもの。

于 2016-12-07T10:12:18.863 に答える