2

カスタムWindowsサービスがあり、Quartz.NETを使用してサービスの実行スケジュールを設定したいと思います。これで、quartz.NETの基本は理解できましたが、Windowsサービスに接続する方法がわかりません。つまり、1時間ごとに実行したいService.exeがあるとします。Quartzを介してこの機能をどのように実装しますか?これは漠然とした質問のようなものですが、他に質問する方法はありません。

前もって感謝します。

4

1 に答える 1

6

ジョブとトリガーを設定する必要があります。ジョブはトリガーによって呼び出されます(http://quartznet.sourceforge.net/tutorial/lesson_3.html)。これは1時間ごとに実行される例です。

// 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を起動した日時を追跡し、後でリセットすることもできます。クォーツよりも少しシンプルで、同じことを実現できます。ただし、あなたの質問はクォーツ固有のものでした。

于 2012-05-21T20:25:16.133 に答える