如何在Quartz.Net中向类发送参数

Hos*_*ein 19 c# arguments quartz.net quartz.net-2.0

我正在使用Quartz.Net(版本2)在每天的8:00和20:00运行类中的方法(IntervalInHours = 12)

一切都很好,因为我使用与Quartz.Net上的教程相同的工作和触发器,但我需要在类中传递一些参数并运行基于这些参数的方法.

任何人都可以帮助我在使用Quartz.Net时如何使用参数?

Ars*_*yan 36

您可以使用JobDataMap

jobDetail.JobDataMap["jobSays"] = "Hello World!";
jobDetail.JobDataMap["myFloatValue"] =  3.141f;
jobDetail.JobDataMap["myStateData"] = new ArrayList(); 

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

        JobDataMap dataMap = context.JobDetail.JobDataMap;

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

        Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
    }
} 
Run Code Online (Sandbox Code Playgroud)


Tod*_*ier 10

要扩展@ArsenMkrt的答案,如果你正在进行2.x风格的流畅作业配置,你可以加载JobDataMap如下:

var job = JobBuilder.Create<MyJob>()
    .WithIdentity("job name")
    .UsingJobData("x", x)
    .UsingJobData("y", y)
    .Build();
Run Code Online (Sandbox Code Playgroud)

  • 除了`UsingJobData()`之外,只有少数值类型的重载 (4认同)