如何在Windows服务中使用Quartz.Net安排任务?

时间:2011-02-10 16:10:16

标签: c# .net windows windows-services quartz.net

我在VS中创建了一个Windows服务项目,并在其中配置Quartz.Net以立即运行任务。注册任务的代码运行没有异常,但是就我的调试而言,任务永远不会执行。

我无法确定,因为调试Windows服务是非常不同的。我这样做的方式是从我的代码以编程方式启动调试器。 Quartz.Net在一个单独的线程上运行作业,但我不确定VS2010在调试Windows服务时是否可以看到其他正在运行的线程。

有没有人做过我以前尝试过的事情?任何提示都表示赞赏。

PS。我不想使用Quartz.Net自己的服务。

3 个答案:

答案 0 :(得分:6)

作业未执行的最常见原因之一是因为您需要在调度程序实例上调用Start()方法。

http://quartznet.sourceforge.net/faq.html#whytriggerisntfiring

但是,如果我们没有某种代码片段来执行调度程序创建和作业注册,那么很难说问题是什么。

答案 1 :(得分:4)

我发现这有点过时了,但在各种搜索中它出现了很多次!

绝对查看本文,该文章在实例化调度程序时使用XML配置。 http://miscellaneousrecipesfordotnet.blogspot.com/2012/09/quick-sample-to-schedule-tasks-using.html

如果您不想使用XML(动态创建的任务等),请使用以下内容替换上述文章中的“运行”过程:

    public void Run()
    {
        // construct a scheduler factory
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();

        _scheduler = schedulerFactory.GetScheduler();

        IJobDetail job = JobBuilder.Create<TaskOne>()
                .WithIdentity("TaskOne", "TaskOneGroup")
                .Build();
        ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("TaskOne", "TaskOneGroup")
        .StartNow()
        .WithSimpleSchedule(x => x.WithIntervalInSeconds(20).RepeatForever())
        .Build();
        _scheduler.ScheduleJob(job, trigger);
        _scheduler.TriggerJob(job.Key);

        _scheduler.Start();
    }

注意 - 使用Quartz .NET 2.1.2,.NET 4

干杯!

答案 2 :(得分:1)

我之前在Windows服务中成功使用过Quart.NET。服务启动时,我创建了Scheduler Factory,然后获取Scheduler。然后我启动调度程序,它隐式读入我在服务的App.config中指定的配置XML。

Quartz.NET基本设置:http://quartznet.sourceforge.net/tutorial/lesson_1.html

App.config设置问题:http://groups.google.com/group/quartznet/browse_thread/thread/abbfbc1b65e20d63/b1c55cf5dabd3acd?lnk=gst&q=%3Cquartz%3E#b1c55cf5dabd3acd