【问题标题】:Quartz .Net Job should reschedule itselfQuartz .Net 作业应该重新安排自己
【发布时间】:2011-09-20 07:50:03
【问题描述】:

我正在使用 Quartz .NET 作业定期从串行端口获取数据。 问题是,如果串行端口被另一个程序使用,则作业应该重新安排自己,以便在 30 分钟内再次尝试。我怎样才能做到这一点?

public virtual void Execute(JobExecutionContext context)
    { 
        SetYModemEvents();
        JobDataMap data = context.JobDetail.JobDataMap;
        string COM = data.GetString("COM");
        string BAUD = data.GetString("BAUD");
        string name = data.GetString("NAME");

        _yModem.AllowDisconnect = true;

        _connection.Port.PortName = COM;
        try
        {
            _connection.Port.BaudRate = int.Parse(BAUD);
        }catch(FormatException)
        {
            _connection.Port.BaudRate = 9600;
        }
        try
        {
            _connection.Port.Open();
        }catch(UnauthorizedAccessException ex)
        {
            //Reschedule this job

        }

        _connection.Port.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler);
        DeadManSwitch.Tick += new EventHandler(DeadManSwitch_Tick);
        DeadManSwitch.Start();

        if(Properties.Settings.Default.UseBubbels)
        {
            ReadOutHelperClass.ShowNotifiy(name, mynotifyicon);
        }

        //Starten der Auslesung
        _connection.Write(protocoll.ReadLoggerData(), 0, protocoll.ReadLoggerData().Length);
        DeadManSwitch.Interval = DeadManTimeOut;

    }

【问题讨论】:

标签: c# triggers serial-port scheduled-tasks quartz.net


【解决方案1】:

我尝试了一些东西。这会添加一个新作业,它是刚刚延迟的旧作业的副本。也许最好在现有工作中添加另一个触发器,但我不让它与第二个触发器一起工作。

public virtual void Execute(JobExecutionContext context)
    { 
        SetYModemEvents();
        JobDataMap data = context.JobDetail.JobDataMap;
        string COM = data.GetString("COM");
        string BAUD = data.GetString("BAUD");
        string name = data.GetString("NAME");

        _yModem.AllowDisconnect = true;

        _connection.Port.PortName = COM;
        try
        {
            _connection.Port.BaudRate = int.Parse(BAUD);
        }catch(FormatException)
        {
            _connection.Port.BaudRate = 9600;
        }
        try
        {
            _connection.Port.Open();
        }catch(UnauthorizedAccessException ex)
        {
            //TODO Testen
            Trigger[] trArray = context.Scheduler.GetTriggersOfJob(context.JobDetail.Name, context.JobDetail.Group);
            if (trArray.Length >= 2)
            {
                trArray.ToList().RemoveRange(1, 1);
            }
            JobDetail JB = context.JobDetail;
            Trigger delayTrigger = new SimpleTrigger(JB.Name + "_Delay", "DGroup", DateTime.UtcNow.AddMinutes(_delay), null, 1, TimeSpan.FromMinutes(_delay)); 
            JB.Name = JB.Name + "_Delay";
            JB.Group = "DGroup";

            context.Scheduler.ScheduleJob(context.JobDetail, delayTrigger);
            return;
        }


        _connection.Port.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler);
        DeadManSwitch.Tick += new EventHandler(DeadManSwitch_Tick);
        DeadManSwitch.Start();

        if(Properties.Settings.Default.UseBubbels)
        {
            ReadOutHelperClass.ShowNotifiy(name, mynotifyicon);
        }

        //Starten der Auslesung
        _connection.Write(protocoll.ReadLoggerData(), 0, protocoll.ReadLoggerData().Length);
        DeadManSwitch.Interval = DeadManTimeOut;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多