简单的例子

本文关键字:简单 | 更新日期: 2023-09-27 18:11:11

我想找一个简单的石英。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();
        }

但是我不能引用文本框。我会有同样的问题与数据网格或工具stripstatuslabel。在上述代码下访问文本框或toolStripStatusLabel等对象的最佳方法是什么?

简单的例子

你可以这样做:

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);
    }
}

我不清楚你是想要按钮来启动调度程序还是开始工作,所以我为两者都添加了一个按钮。关键在于,您希望初始化调度程序,而不是通过单击按钮启动调度程序。初始化它的最简单的地方是在表单的构造函数中。