gpt4 book ai didi

c# - Quartz.net 简单示例

转载 作者:可可西里 更新时间:2023-11-01 08:24:11 24 4
gpt4 key购买 nike

我试图找到一个简单的 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 窗体一起工作。似乎是一个完全不同的项目。

/////

其他更改:2011 年 10 月 14 日

我查看了建议的代码并找到了以下与另一个(简单)示例的链接。 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();
}

但我无法引用文本框。我会遇到与数据网格或 toolStripStatusLabel 相同的问题。在上述代码下访问文本框或 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);
}
}

我不清楚你是想让按钮启动调度程序还是启 Action 业,所以我为两者都添加了一个按钮。关键是您要单独初始化调度程序,而不是通过单击按钮启动它。最简单的初始化位置是在表单的构造函数中。

关于c# - Quartz.net 简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com