c# - 使用 quartz .NET 调度 Windows 服务

标签 c# .net windows-services quartz-scheduler quartz.net

我有一个自定义的 Windows 服务,我想使用 Quartz .NET 来安排服务运行的时间。现在,我了解了 quartz.NET 的基础知识,但我不确定如何将它连接到 Windows 服务。所以,假设我有 Service.exe,我想每小时运行一次。我将如何通过 Quartz 实现此功能?我知道这是一个模糊的问题,但实际上没有其他方式可以提出这个问题。

提前致谢。

最佳答案

您需要设置作业和触发器。该作业由触发器调用。( http://quartznet.sourceforge.net/tutorial/lesson_3.html )。这是一个每小时运行一次的示例。

// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();

// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();

// construct job info
JobDetail jobDetail = new JobDetail("myJob", null, typeof(DumbJob));
// fire every hour
Trigger trigger = TriggerUtils.MakeHourlyTrigger();
// start on the next even hour
trigger.StartTime = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);  
trigger.Name = "myTrigger";
sched.ScheduleJob(jobDetail, trigger);

这是调用 Service.exe 的类。

public class DumbJob : IJob
{
    public void Execute(JobExecutionContext context)
    {
        string instName = context.JobDetail.Name;
        string instGroup = context.JobDetail.Group;

        // Note the difference from the previous example
        JobDataMap dataMap = context.MergedJobDataMap;

        string jobSays = dataMap.GetString("jobSays");
        float myFloatValue = dataMap.GetFloat("myFloatValue");
        ArrayList state = (ArrayList) dataMap.Get("myStateData");
        state.Add(DateTime.UtcNow);

        Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
    }
}

您也可以只在 Windows 服务中启动一个线程,跟踪上次启动 exe 的时间,然后再重置。它比 Quartz 简单一点,并且可以完成相同的事情。但是,您的问题是针对 Quartz 的。

关于c# - 使用 quartz .NET 调度 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691298/

相关文章:

c# - 一系列数字的正则表达式和一个用于验证的字符

c# - 属性构造函数不能使用 console.writeline

java - 我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?

c# - Windows 服务未出现在已安装的服务中(因此无法启动)

c# - 从窗口服务显示窗口窗体

c++ - Windows服务安装返回错误1053

c# - 需要帮助使用 for 循环递增 1。每次只加1

c# - 为什么这个 INSERT 命令不起作用?

c# - 具有 protected 构造函数和工厂方法的对象列表的自动固定

.net - 为子查询提供表达式