2013-09-24 78 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