2014-02-21 2 views
1

Я использую библиотеку Task Scheduler здесь: taskscheduler.codeplex.comСоздание повторяющихся задач с помощью планировщика заданий

В соответствии с их примерами, я пытаюсь создать задачу с следующим поведением: Задача должна выполняться при каждом 1 час на все 12 месяцев, включая все дни месяца.

Следующий код делает это, за исключением того, что задача не повторяется каждые 1 час. Он запускается один раз, а затем он запускается на следующий день.

   TaskDefinition td = ts.NewTask(); 
       td.RegistrationInfo.Description = "sample task"; 

       // Create a trigger that will execute very 1 hour. 
       var trigger = new MonthlyTrigger(); 
       trigger.StartBoundary = DateTime.Now + TimeSpan.FromSeconds(60); 
       trigger.Repetition.Interval = TimeSpan.FromHours(1); 
       trigger.Repetition.Duration = TimeSpan.FromHours(24); 
List<int> days = new List<int>(); 
       for (int i = 1; i < 32; i++) 
       { 
        days.Add(i); 
       } 
       trigger.DaysOfMonth = days.ToArray(); 

       td.Triggers.Add(trigger); 
       td.Actions.Add(new ExecAction(Assembly.GetEntryAssembly().Location)); 
       // Register the task in the root folder 
       ts.RootFolder.RegisterTaskDefinition(@"RemoteClient Task", td); 

Я также пробовал TimeTrigger, но это тоже не повторяет задачу. Если я вижу, созданную задачу в окне Запланированные задач, я вижу следующее:

Task Scheduler actions

Если вы видите красный выделена часть, повторение задача выключена. Мне нужно включить его, чтобы моя задача выполнялась каждый час в день. Любая помощь была бы велика в этом направлении.

Спасибо, Jay

ответ

4

Я считаю, следующая строка является виновником.

trigger.Repetition.Duration = TimeSpan.FromHours(24); 

Вы хотите удалить эту строку. Я написал следующую программу и работает так, как ожидалось.

static void Main(string[] args) 
    { 
     // Get the service on the local machine 
     using (TaskService ts = new TaskService()) 
     { 
      // Create a new task definition and assign properties 
      TaskDefinition td = ts.NewTask(); 
      td.RegistrationInfo.Description = "Does something"; 

      // Add a trigger that, starting now, will fire every day 
      // and repeat every 1 minute. 
      var dt = new DailyTrigger(); 
      dt.StartBoundary = DateTime.Now; 
      dt.Repetition.Interval = TimeSpan.FromSeconds(60); 
      td.Triggers.Add(dt); 

      // Create an action that will launch Notepad whenever the trigger fires 
      td.Actions.Add(new ExecAction("notepad.exe", "c:\\test.log", null)); 

      // Register the task in the root folder 
      ts.RootFolder.RegisterTaskDefinition("Test", td); 
     } 
     Console.ReadLine(); 
    } 

Это как выше задачи выглядит в Task Scheduler UI:

enter image description here

+0

я бегу тот же код и произвести другое определение задачи !. Смотрите скриншот здесь. https://www.dropbox.com/s/awq51jmdc5mxk4b/ts2.png –

+0

Спасибо. Это работает. Я использовал интервал менее 60 секунд, поэтому он не регистрировался на каждый минутный интервал. Спасибо за помощь. :) –

Смежные вопросы