C# Quartz.net简单示例
我试图找到一个简单的Quartz.Net示例,当单击按钮时,它将启动Quartz.Net功能 我能够以Quartz.Net为例(控制台应用程序)并更改一些内容来生成这个(SimpleExample.cs): 但那没用 我查看了以下网站,但并不是所有网站都有助于从点击按钮开始 -Java,我很难理解它们之间的区别(我对这一切都是新手!) -这很有帮助,但我不清楚Silverlight如何与常规的.Net表单一起工作。似乎是一个完全不同的项目 ///// 其他变更:2011年10月14日 我查看了建议的代码,并发现以下与另一个(简单)示例的链接。 我继续构建了一个简单的表单,对作者的代码做了一些修改,如下所示:C# Quartz.net简单示例,c#,quartz.net,C#,Quartz.net,我试图找到一个简单的Quartz.Net示例,当单击按钮时,它将启动Quartz.Net功能 我能够以Quartz.Net为例(控制台应用程序)并更改一些内容来生成这个(SimpleExample.cs): 但那没用 我查看了以下网站,但并不是所有网站都有助于从点击按钮开始 -Java,我很难理解它们之间的区别(我对这一切都是新手!) -这很有帮助,但我不清楚Silverlight如何与常规的.Net表单一起工作。似乎是一个完全不同的项目 ///// 其他变更:2011年10月14日 我查看
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Quartz;
using Quartz.Impl;
//http://simplequartzschedulerincsharp.blogspot.com/
namespace QuartzExampleWF
{
public partial class Form1 : Form
{
private static IScheduler _scheduler;
public Form1()
{
InitializeComponent();
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler();
AddJob();
}
public static void AddJob()
{
IMyJob myJob = new MyJob();
JobDetail jobDetail = new JobDetail("Job1", "Group1", myJob.GetType());
CronTrigger trigger = new CronTrigger("Trigger1", "Group1", "5 0/1 * * * ?");
_scheduler.ScheduleJob(jobDetail, trigger);
DateTime? nextFireTime = trigger.GetNextFireTimeUtc();
}
private void button1_Click(object sender, EventArgs e)
{
_scheduler.Start();
}
internal class MyJob : IMyJob
{
public void Execute(JobExecutionContext context)
{
DateTime now = DateTime.Now;
DoMoreWork();
}
public void DoMoreWork()
{
//more code...
}
}
internal interface IMyJob : IJob
{
}
}
}
我以前从未做过内部类,并遇到了引用内部文本框的问题。例如,我正在尝试执行以下操作:
public void Execute(JobExecutionContext context)
{
DateTime now = DateTime.Now;
this.textbox1 = Now.value;
DoMoreWork();
}
但是我不能引用文本框。对于datagrid或toolStripStatusLabel,我也会遇到同样的问题。在上述代码下,访问文本框或toolStripStatusLabel等对象的最佳方式是什么?您可以执行以下操作:
private void button1_Click(object sender, EventArgs e)
{
code here....
}
public partial class MainForm : Form
{
IScheduler sched;
IJobDetail job;
public MainForm()
{
InitializeComponent();
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTime.UtcNow);
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 10);
job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(runTime)
.WithCronSchedule("5 0/1 * * * ?")
.Build();
sched.ScheduleJob(job, trigger);
}
private void startScheduler_Click(object sender, EventArgs e)
{
sched.Start();
}
private void startJob_Click(object sender, EventArgs e)
{
sched.TriggerJob(job.Name, job.Group);
}
}
public分部类MainForm:Form
{
IScheduler-sched;
详细工作;
公共表格(
{
初始化组件();
isSchedulerFactory sf=新StdSchedulerFactory();
isScheduler sched=sf.GetScheduler();
DateTimeOffset运行时=DateBuilder.EvenMinuteDate(DateTime.UtcNow);
DateTimeOffset startTime=DateBuilder.NextGivenSecondDate(null,10);
job=JobBuilder.Create()
.WithIdentity(“工作1”、“组1”)
.Build();
ITrigger trigger=TriggerBuilder.Create()
.WithIdentity(“触发器1”、“组1”)
.StartAt(运行时)
.随附附件(“50/1***?”)
.Build();
sched.ScheduleJob(作业,触发器);
}
private void startScheduler_单击(对象发送者,事件参数e)
{
sched.Start();
}
私有void startJob_单击(对象发送方,事件参数e)
{
sched.TriggerJob(job.Name,job.Group);
}
}
我不清楚你是想让这个按钮启动调度程序还是启动作业,所以我为两者都添加了一个按钮。关键是,您要分别初始化调度程序和单击按钮启动它。初始化它的最简单位置是表单的构造函数。sched需要是click事件中可用的变量。按照您对运行方法进行编码的方式,一旦运行方法完成,调度程序将不可用。刚刚发现非常有用的Quartz.NET课程:这些示例已经过时,这太糟糕了。上一版本中的所有类都不能与站点中的新类一起使用。感谢您共享此代码。startTime从未使用过?Quartz.NET 2.0.1:_scheduler.TriggerJob(_jobDetail.Key)@HFR开始时间用于确定何时可以进行最早的点火。例如,2013年12月16日。如果您有每天上午9点的计划,但您将开始时间设置为2014年1月1日,则第一次触发直到1月1日才会发生,即使触发器已启用且作业已安排。当我尝试执行此操作时,如果我再次单击按钮,我得到一个
Quartz.JobPersistenceException
,如果我检查调度程序中是否存在作业
,它会说它不存在。TriggerJob
是否以某种方式将作业从IScheduler
中删除?不管怎样,我找到了答案。我的作业
不再排定日程。我没有读作业中的位耐久性
。“持久性-如果作业是非持久性的,则一旦不再有任何与之相关联的活动触发器,它将自动从计划程序中删除。换句话说,非持久性作业的寿命受其触发器存在的限制。”from
public partial class MainForm : Form
{
IScheduler sched;
IJobDetail job;
public MainForm()
{
InitializeComponent();
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTime.UtcNow);
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 10);
job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartAt(runTime)
.WithCronSchedule("5 0/1 * * * ?")
.Build();
sched.ScheduleJob(job, trigger);
}
private void startScheduler_Click(object sender, EventArgs e)
{
sched.Start();
}
private void startJob_Click(object sender, EventArgs e)
{
sched.TriggerJob(job.Name, job.Group);
}
}