Quartz.NET实现与教程不一致

29

我尝试使用这个教程实现一个非常简单的Quartz.net实现。

using Quartz;
using Quartz.Impl;

// 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(HelloJob));
// fire every hour
Trigger trigger = TriggerUtils.MakeHourlyTrigger();
// start on the next even hour
trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);  
trigger.Name = "myTrigger";
sched.ScheduleJob(jobDetail, trigger);
我遇到的问题是(举例来说)MakeHourlyTrigger在Intellisense中不可用,会报错:

Quartz.TriggerUtils中没有'MakeHourlyTrigger'的定义。

我的类型也出现错误,例如JobDetail:

"找不到类型或命名空间名称“JobDetail”(是否缺少使用指示或程序集引用?)"

也许我很累,错过了一些愚蠢而简单的东西...希望是这种情况。所有我在互联网上看到的示例都说我应该使用Quartz和Quartz.Impl。请告诉我我只是错过了一些容易的东西...

很抱歉,目前我无法提供帮助。但是,上次我查看Quartz.NET时,所有的文档和示例确实都已经过时了。祝你好运! - Coxy
1
好的,我已经下载了源代码(最初我使用了NuGet),看起来包含了相当多的示例。现在正在浏览它们。如果在线教程能够更新以反映所有主要更改,那就太好了...也许我会在项目之间抽出时间去做这件事。你知道的...咳咳。 - Michael Glass
3个回答

33
文档针对的是1.0版本的API。现在情况已经发生了变化,是的,这些变化会导致一些问题。 请查看这个官方迁移页面。你可能会在那里找到一些解决方案。

1
迁移指南中至少有一个错别字:IntervalUnit.HOURS 应该是 IntervalUnit.Hour。希望教程能够在不久的将来更新以反映 2.x 的现实情况... - Eric J.

11

我知道这不是正确的地方。我应该编辑原始维基百科等等。我试图在周五之前,在我的晚上完成31个小时的工作。所以开干吧。

第一课

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Impl;

namespace QuartzNetTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // construct a scheduler factory
            ISchedulerFactory schedFact = new StdSchedulerFactory();

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

            // construct job info
            IJobDetail jobDetail = JobBuilder.Create<HelloJob>()
                .WithIdentity("myJob")
                .Build();
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("myTrigger")
                // fire every hour
                .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
                // start on the next even hour
                .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Hour))
                .Build();

            sched.ScheduleJob(jobDetail, trigger);
        }
    }

    class HelloJob : Quartz.IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Debug.WriteLine("Hello at " + DateTime.Now.ToString());
        }
    }

}

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接