关于System.Timers.Timer的问题,如何解决?

定义了一个 private System.Timers.Timer tm1 = null;想定时在每天的指定时间点,然后5分钟间隔内持续执行一个方法。现在程序在指定的时间点执行,但是,间隔设置了不生效,后面不会继续执行了。请帮我看一下是哪里出问题了?谢谢

private void tm1_Elapsed(object source, ElapsedEventArgs e)
        {
   if (DateTime.Now.Minute.ToString() == this.scsj.ToString())
            {
                Logger.log("到达上传时间点:" + this.scsj.ToString() + "时" + Environment.NewLine);
                this.sgscbz = 0;
                this.tm1.Enabled = false;
                this.tm1.Elapsed -= new ElapsedEventHandler(this.tm1_Elapsed);
                this.tm1.Elapsed += new ElapsedEventHandler(this.tm2_Elapsed);
                this.tm1.Interval = 300000;
                this.tm1.Enabled = true;
                this.tm1.Start();
                this.tm2_Elapsed(null, null);
            }
        }
        private void tm2_Elapsed(object source, ElapsedEventArgs e)
        {
            try
            {
                 if (this.UploadData())
                {
               Logger.log("***********上传成功************");
                 }
                else
                {
                    this.tm1.Enabled = false;
                    this.tm1.Stop();
                }
            }
            catch (Exception exception)
            {
                Logger.log("错误" + exception.Message);
                MessageBox.Show(exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
        }
//定时开启按钮
        private void btnOption_Click(object sender, EventArgs e)
        {
           
            if (this.dsbz == 1)
            {
                if (this.tm1 == null)
                {
                    this.tm1 = new System.Timers.Timer();
                    this.tm1.Elapsed += new ElapsedEventHandler(this.tm1_Elapsed);
                    this.tm1.Interval = 1000;
                    this.tm1.AutoReset = true;
                }
                this.tm1.Enabled = true;
                this.tm1.Start();
               this.tm1_Elapsed(null, null);
               }
            else if (this.tm1 != null)
            {
                this.tm1.Enabled = false;
             }
        }

img

你两处设置调用 tm2 方法,而 tm2 中关闭了计时器,你没有其他地方打开么?

  • 以下回答由chatgpt基于相关博客总结生成:

    由于参考资料中的问题和代码比较抽象,我无法准确理解题目的意思和需要优化的点。需要更多的问题细节和说明来澄清问题,以便提供更准确的解决方案。

你把定时器关了,当然就不执行了
如果你既需要每天定时执行,又需要每隔5分钟执行,那么要么你搞2个不同的定时器
要么你的程序干脆不要一直开着,反正一天里大部分时间它什么都不干
你不如让它执行完任务就自动退出,然后把它放系统的计划任务里每天定时启动