C# 如何使作业在Quartz.Net中引发事件处理程序?

C# 如何使作业在Quartz.Net中引发事件处理程序?,c#,quartz-scheduler,C#,Quartz Scheduler,我有一个控制台应用程序,可以实例化Quartz调度程序。 我想要一个引发事件处理程序的作业,以便“母应用程序”调用特定的方法。 问题是Job类显然与外部类非常隔离

我有一个控制台应用程序,可以实例化Quartz调度程序。
我想要一个引发事件处理程序的作业,以便“母应用程序”调用特定的方法。
问题是Job类显然与外部类非常隔离<我确信有一个很好的方法可以做到这一点,但我还没有偶然发现它

public class RestartJob : IJob
{        
    public RestartJob()
    {
    }

    public virtual void Execute(IJobExecutionContext context)
    {
        //Send Restart EventHandler Subscription to Console.            
    }
}

我通过在包含调度程序逻辑的类上实现一个单例解决了我的问题。 他很有魅力。希望这能帮助其他人解决我认为“必须具备”的功能

用法:

    public MainClass
    {   
        public void Run()
        {
          skeduler = Skeduler.Instance;
          skeduler.SendRestart += new Skeduler.SendRestartX(MethodToCall);
        }
    }
您可以尝试以下方法: 创建IJobDetail:

IJobDetail job = JobBuilder.Create<LogJob>().WithIdentity("job"), "group")
        .UsingJobData("id", 123).Build();
job.JobDataMap["SOMENAME"] = this;

您可以在JobDataMap中传递事件处理程序,然后从作业中使用事件处理程序

创建工作时

IJobDetail job = JobBuilder.Create<RestartJob>().WithIdentity("job"), "group")
        .SetJobData(new JobDataMap{{"event-handler", YourEventHandler}});

可能相关的问题:是的,你是对的。我看到。。。不过听起来有点老套。如果没有比这更简单的方法,我会尝试:)但是我必须调整它,因为我没有使用自定义触发器。
public void Execute(IJobExecutionContext context) {
    JobDataMap dataMap = context.JobDetail.JobDataMap;
    CLASSNAME SOMENAME = dataMap["SOMENAME"] as MediaPlaylistsAds;
    int id = (int)dataMap["id"];
    SOMENAME.SOMEFUNC(id);
}
IJobDetail job = JobBuilder.Create<RestartJob>().WithIdentity("job"), "group")
        .SetJobData(new JobDataMap{{"event-handler", YourEventHandler}});
public class RestartJob : IJob
{        
    public RestartJob()
    {
    }

    public virtual void Execute(IJobExecutionContext context)
    {
        var @event = context.JobDetail.JobData["event-handler"];
        @event?.Invoke(YourEventParameters); 
    }
}