我正在尝试寻找一个简单的Quartz.Net示例,在该示例中,当单击按钮时,它将启动Quartz.Net功能。
我能够使用Quartz.Net示例(控制台应用程序)并更改一些内容来生成以下代码(SimpleExample.cs):
public virtual void Run()
{
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();
DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTime.UtcNow);
DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 10);
IJobDetail 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);
sched.Start();
}但我有点困惑,因为点击一下按钮就会触发这种情况。我想我可以这样做:
private void button1_Click(object sender, EventArgs e)
{
code here....
}但这并不管用。
我回顾了以下网站,但并不是所有的网站都能帮助我从点击按钮开始。
http://www.mkyong.com/java/quartz-scheduler-example/ - Java,我很难理解它们之间的区别(我是个新手!)。
http://www.hardcodet.net/2010/01/lightweight-task-slash-job-scheduling-with-silverlight-support -这很有帮助,但我不清楚Silverlight是如何与常规的.Net表单一起工作的。似乎是一个完全不同的项目。
/
其他更改: 10/14/2011
我查看了建议的代码,并找到了下面与另一个(简单)示例的链接。http://simplequartzschedulerincsharp.blogspot.com/
我继续构建了一个简单的表单,并对作者的代码进行了一些更改,如下所示:
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();
}但我不能引用textbox。对于datagrid或toolStripStatusLabel,我也会遇到同样的问题。在上述代码中,访问textbox或toolStripStatusLabel等对象的最佳方式是什么?
发布于 2011-10-12 02:25:55
你可以这样做:
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);
}
}我不清楚您是想让按钮启动调度程序还是启动作业,所以我为这两个按钮都添加了一个按钮。关键在于,您希望通过单击按钮来启动调度程序,而不是将其初始化。初始化它的最简单位置是在窗体的构造函数中。
https://stackoverflow.com/questions/7729807
复制相似问题