我们在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);
}
}
答案 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);
}
}
}
希望有所帮助 盖瑞特