在c#中执行“add_interval_job”的类似方式

时间:2014-09-17 08:03:23

标签: c# python quartz.net

我们在Python的模块apscheduler中知道这个函数" add_inverval_job"这允许我们安排工作,尤其是带有一堆参数的另一个函数。现在我需要在c#中实现它。我已经通过了Quartz.net。据我所知,要安排的工作应该在从IJob继承的类中定义。问题是我想要安排的函数(作业)由激发的函数和来自其他类的参数组成,有很多参数。我找到的所有例子都没有类似的情况。

我想知道c#中是否有更好的方法可以帮助我实现这一目标。或者,如果有人可以通过Quartz.net帮助我。

我要添加的功能是:

private void job_recording(
    string ffmpeg_command, string stream, string cam_ID, int period,
    string vpath, string full_cam_IP, string cam_type, string cam_usr, 
    string cam_pwd)
{
    if (!cam_enabled(cam_ID))
        logger.info ("REC: rec not enabled for %s", cam_ID);
    else
    {
        if (!enable_cam_datetime_setting)
            logger.info('REC: IP camera datetime setting disabled');
        else
        {
            if (cam_type=="axis")
                CSCAMCONFIG.axis_set_datetime(full_cam_IP, cam_usr, cam_pwd);
            else
                logger.info('REC: IP camera datetime not settable');
        }
        string fName=get_fName(cam_ID, period * 60, vpath);
        string command=ffcommand(period, stream, fName);
        //logger
        string rec_process=...;
        set_rec_process(cam_ID, rec_process);
    }
}

1 个答案:

答案 0 :(得分:0)

查看http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-about-jobs.html

我认为你需要的是使用JobDataMap - 本质上允许你将一组任意参数传递给你的工作处理类

所以 - 您将按如下方式添加作业(代码无法编译!)....

IJobDetail job = JobBuilder.Create<RecordingJob>()
    .WithIdentity("myJob", "group1") // name "myJob", group "group1"
    .UsingJobData("ffmpeg_command", "*some command*")
    .UsingJobData("stream", "*some stream*")
      // Add all your other params here ...
    .Build();

你的工作班看起来像这样(再次不可编辑)......

public class RecordingJob : IJob
{
    public void Execute(JobExecutionContext context)
    {
      JobKey key = context.JobDetail.Key;

      JobDataMap dataMap = context.JobDetail.JobDataMap;

      string ffmpeg_command= dataMap.GetString("ffmpeg_command");
      float stream= dataMap.GetFloat("stream");

      // file out the rest of the parameters

      job_recording(ffmpeg_command, stream ...... );
    }

        // and your job func here 
     private void job_recording(
             string ffmpeg_command, string stream, string cam_ID, int period,
             string vpath, string full_cam_IP, string cam_type, string cam_usr, 
             string cam_pwd)
     {
        if (!cam_enabled(cam_ID))
            logger.info ("REC: rec not enabled for %s", cam_ID);
        else
        {
            if (!enable_cam_datetime_setting)
                logger.info('REC: IP camera datetime setting disabled');
            else
            {
                if (cam_type=="axis")
                    CSCAMCONFIG.axis_set_datetime(full_cam_IP, cam_usr, cam_pwd);
                else
                    logger.info('REC: IP camera datetime not settable');
                }
            string fName=get_fName(cam_ID, period * 60, vpath);
            string command=ffcommand(period, stream, fName);
            //logger
            string rec_process=...;
            set_rec_process(cam_ID, rec_process);
        }
    }
} 

希望有所帮助 盖瑞特