2016-12-06 2 views
0

Je suis nouveau sur quartz.net. Je veux construire une application basée sur une fenêtre simple qui a planifié la tâche. Supposons que j'ai 4 ans, il tâche de début et de fin Exemplequartz.net exemple simple selon l'heure donnée

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

Maintenant, je veux quand je clique sur le bouton à 8:00 une boîte de message apparaît avec un texte « petit-déjeuner commencé !!! » à 8h30 du matin encore une boîte de message devrait apparaître avec un texte comme "Fin de petit déjeuner !!!" etc.

J'avais traversé tutorial. Mais confondre comment procéder. Quelqu'un peut m'aider?

EDIT

Est-il possible d'utiliser un emploi et on déclenche pour cela?

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

Vous pouvez utiliser un travail, mais vous avez besoin de plusieurs déclencheurs. – Rabban

+0

@Rabban ok. mais si nous voulons passer un paramètre pour ce tigger particulier que comment cela serait fait comme dans mon exemple ci-dessus je passe un nom de tâche à la et j'obtiens le temps de la méthode Execute –

Répondre

0

Vous pouvez planifier un travail comme suit et utiliser cet exemple simple: méthode

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(); 

Vous devez implémenter votre logique (disons montrant une boîte de message) dans « Exécuter » de votre classe d'emploi. La définition de plusieurs déclencheurs pour votre travail entraîne plusieurs exécutions. Dans la classe d'emploi par exemple "MealAlertJob" vous pouvez vérifier l'heure et afficher une alerte basée sur elle. Dans l'exemple ci-dessus, vous pouvez ajouter plus de déclencheurs pour les quatre autres heures (début/fin du déjeuner et début/fin du dîner).

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

ou quelque chose comme ceci.

+0

Supposons que le temps ne soit pas connu alors .. Si cela dépend de l'entrée de l'utilisateur le? –

+0

@PriteshChhunchha Une fois que vous recevez les temps de l'utilisateur, vous pouvez le stocker quelque part comme une base de données ou un fichier de configuration. Vous pouvez restaurer les heures à partir de l'endroit où vous les avez enregistrées une fois au démarrage de l'application. puis décidez en fonction d'eux dans la méthode Execute. – aminexplo