C# Quartz.net简单示例

C# Quartz.net简单示例,c#,quartz.net,C#,Quartz.net,我试图找到一个简单的Quartz.Net示例,当单击按钮时,它将启动Quartz.Net功能 我能够以Quartz.Net为例(控制台应用程序)并更改一些内容来生成这个(SimpleExample.cs): 但那没用 我查看了以下网站,但并不是所有网站都有助于从点击按钮开始 -Java,我很难理解它们之间的区别(我对这一切都是新手!) -这很有帮助,但我不清楚Silverlight如何与常规的.Net表单一起工作。似乎是一个完全不同的项目 ///// 其他变更:2011年10月14日 我查看

我试图找到一个简单的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);
    }
}