2012-01-19 54 views
0

我使用Quartz.NET在我的ASP.NET应用程序作业调度和我在global.asax文件中创建一个触发器:Quartz.Net的cron触发C#

// Code that runs on application startup 
ISchedulerFactory schedFact = new StdSchedulerFactory(); 
// get a scheduler 
IScheduler sched = schedFact.GetScheduler(); 
sched.Start(); 
// construct job info 
JobDetail jobDetail = new JobDetail("mySendMailJob", typeof(SendMailJob)); 

SimpleTrigger trigger = new SimpleTrigger("myTrigger", 
         null, 
         DateTime.UtcNow, 
         null, 
         SimpleTrigger.RepeatIndefinitely, 
         TimeSpan.FromSeconds(60)); 

sched.ScheduleJob(jobDetail, trigger); 

此代码工作正常,我并在每1分钟后发射并完成我所需的工作。

我试图用这种方式创建另一个触发器,以便在上午10点的特定时间触发,但它不适用于我。我也想制作失火指示。假设我的触发器在特定时间没有被触发;我如何获得失火指示来重新加载我的触发器来完成这项工作?

ISchedulerFactory schedFact = new StdSchedulerFactory(); 
// get a scheduler 
IScheduler sched = schedFact.GetScheduler(); 
sched.Start(); 
// construct job info 
JobDetail jobDetail = new JobDetail("mySendMailJob", typeof(SendMailJob)); 

Trigger trigger2 = TriggerUtils.MakeDailyTrigger(10, 00); 

// schedule the job for execution 
//trigger2.Name = "mySendMailTrigger"; 
sched.ScheduleJob(jobDetail, trigger2); 
+2

如果你要做一个窗口服务工作的机会,然后更好地做到这一点。在ASP.NET中执行后台任务时存在风险。阅读http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx –

+0

Thanx Malcom对于您的建议, 但事情是IM处理ASP应用程序将在共享服务器上托管。而且我不能托管我的窗口服务,并且我希望我的例程之一在每日基础上或根据定义的标准在指定时间内向用户发送电子邮件。经过长时间的搜索和讨论,我发现Quartz.Net会做我期望的工作。 :) –

回答

1

您可以使用一个cron触发配方CronMaker,就这么简单:

0 0 10 1/1 * ? * 

,并创建一个CronTrigger类使用它,请参阅documentation,对不起,我没有一个例子,现在,但如果你做不到,我明天就会发布。

+0

Thanx Gustavo, 我已经用Cron触发器完成了某些事情,但有时候它没有启动 –