2016-12-06 4 views
0

私はquartz.netを初めて使っています。私はタスクをスケジュールした簡単なウィンドウベースのアプリケーションを構築したい。今、私は私が午前8時メッセージボックスのボタンをクリックしたときにテキストで表示されますたいquartz.net与えられた時間あたりの簡単な例

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

例を開始し、終了時間、私は4タスクがそれをANSがあるとし、「朝食を始めた!!!」午前8時30分にもう一度メッセージボックスに「朝食エンド!!!」というテキストが表示されます。等々。

私はtutorialを行っていました。しかし、進める方法を混乱させる。誰も私を助けることができますか?

EDIT

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); 
      } 
     } 
+0

1つのジョブを使用できますが、複数のトリガーが必要です。 – Rabban

+0

@Rabban ok。私が上記の例のようにする方法よりも、その特定のtiggerのパラメータを渡したい場合、私はExecuteメソッドの時間にタスク名を渡しています –

答えて

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.... 
    } 
} 

などです。

+0

時間が分からないと仮定します。そのユーザーの入力に依存する場合? –

+0

@PriteshChhunchhaユーザーから時刻を受け取ったら、データベースや設定ファイルのような場所に保存することができます。アプリケーションの起動時に1回保存した場所から時刻を復元することができます。 Executeメソッドでそれらに基づいて決定します。 – aminexplo

関連する問題