2013-09-24 44 views
1

我有一个数据库,其中有进程名称和时间的列。我有一个windows服务,它有一个从数据库中提取的进程名称和时间列表,现在想在该特定时间触发该进程。有没有一种方法可以让我自己触发这些进程(方法)的预定时间列表?C#自动调度程序

这就是我到目前为止所尝试的。我想要运行报表方法来在不同的时间事件上获取触发器作为我的计划列表,例如,上午10:00,下午12:20,下午1:45 ...等一旦我的Windows服务正在运行。

public override void Run() 
    { 
    var _dateNow = DateTime.Now(); 
     _schedule = scheduleProvider.GetSchedules(); 

     foreach (ProcessEngineSchedule sc in _schedule) 
     { 
      if (_dateNow.Hour == sc.Time.Hour && _dateNow.Minute == sc.Time.Minute) 
      { 
       RunReport(); 
      } 
     } 
    } 
+1

您可以发布您的代码你尝试过这么远吗? – Mingebag

+0

有很多方法,例如http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx,但为了帮助您决定什么是最好的方式,我们将需要更多的信息。 –

+0

我刚刚添加了一些基本想法的代码片段。谢谢! – rajcool111

回答

0

最新版本Quartz.net添加从的NuGet到项目

然后你可以用类似下面的代码启动过程的每一天在指定的小时和分钟。你可以玩触发器选项,有很多选择。

编辑:更新,以反映在发布更新问题

_schedule = scheduleProvider.GetSchedules(); 

    ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); 

    scheduler = schedulerFactory.GetScheduler(); 

    var count = 0; 
    foreach (ProcessEngineSchedule sc in _schedule) 
    { 
     IJobDetail job = JobBuilder.Create<YourProcess>() 
       .WithIdentity("YourProcess" + count.ToString(), null) 
       .Build(); 

     ITrigger trigger = TriggerBuilder.Create() 
      .WithIdentity("YourProcess" + count.ToString(), null) 
      .WithDailyTimeIntervalSchedule(x => x 
           .OnEveryDay() 
            .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(sc.Time.Hour, sc.Time.Minute))) 
        .Build(); 

     scheduler.ScheduleJob(job, trigger); 

     count++; 
    } 

    scheduler.Start(); 

代码然后你的过程应该是这样的

public class YourProcess: IJob 
{ 

    public void Execute(IJobExecutionContext context) 
    { 
     //Your code goes here 
     RunReport(); 
    } 
} 
+0

这就近!如果我有一个小时和分钟的列表,该怎么办?我想安排它多个小时/时间? – rajcool111

+0

您可以创建许多触发器并将其添加到调度器。检查您的最新更新,您可以将创建和添加触发器放在您拥有的foreach中的石英schedeler。然后在YourProcess类中只需要RunReport()方法。 –

+0

我试过后,它运行的工作,它给错误“jobrunshell.cs找不到” – rajcool111

0

如果是可执行文件,或批处理文件,则可以使用的Process.Start。 ShellExecute equivalent in .NET

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/12323804) – Mostafiz

+0

通常情况下,我会同意你的看法并改变这个答案。但是,该问题没有提供足够的信息来为Process.Start()提供可用的示例。链接只是指向另一个SO文章。 – tgolisch