2012-05-21 105 views
0

我有一個自定義的Windows服務,我想使用Quartz .NET來安排服務運行的時間。現在,我瞭解quartz.NET的基礎知識,但我不知道如何將它連接到Windows服務。因此,可以說我有Service.exe,我想每小時運行一次。我如何通過Quartz實現這個功能?我知道這是一個模糊的問題,但實際上沒有其他辦法可以問它。用石英計劃窗口服務.NET

在此先感謝。

+0

我會在這種情況下使用Windows調度程序,因爲功能已經封裝在服務中。 –

+0

這也是我的第一個想法。但不幸的是,我並沒有在這裏做出決定:P –

回答

3

您需要設置作業和觸發器。該作業由觸發器調用(http://quartznet.sourceforge.net/tutorial/lesson_3.html)。這是一個每小時運行一個例子。

// construct a scheduler factory 
ISchedulerFactory schedFact = new StdSchedulerFactory(); 

// get a scheduler 
IScheduler sched = schedFact.GetScheduler(); 
sched.Start(); 

// construct job info 
JobDetail jobDetail = new JobDetail("myJob", null, typeof(DumbJob)); 
// fire every hour 
Trigger trigger = TriggerUtils.MakeHourlyTrigger(); 
// start on the next even hour 
trigger.StartTime = TriggerUtils.GetEvenHourDate(DateTime.UtcNow); 
trigger.Name = "myTrigger"; 
sched.ScheduleJob(jobDetail, trigger); 

這是調用Service.exe的類。

public class DumbJob : IJob 
{ 
    public void Execute(JobExecutionContext context) 
    { 
     string instName = context.JobDetail.Name; 
     string instGroup = context.JobDetail.Group; 

     // Note the difference from the previous example 
     JobDataMap dataMap = context.MergedJobDataMap; 

     string jobSays = dataMap.GetString("jobSays"); 
     float myFloatValue = dataMap.GetFloat("myFloatValue"); 
     ArrayList state = (ArrayList) dataMap.Get("myStateData"); 
     state.Add(DateTime.UtcNow); 

     Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays); 
    } 
} 

你也可以在windows服務中啓動一個線程,跟蹤你最後一次啓動exe的時間,然後重新設置。石英有點簡單,並且會完成相同的事情。但是,你的問題是Quartz特有的。

+1

但是它究竟在哪裏與Service.exe掛鉤呢? –

+0

您可以在「執行(...)」方法中調用它。 –

+0

如何?語法上來說 –