代码如下,我想用Timer做个循环,
循环的目的是每天在指定的时间里只执行一次任务(以小时为单位),
5分钟检查一次.任务成功后这天就不在执行了,
到第二天这个时间再继续循环执行;
该如何实现? 
我用Timer.AutoReset=false执行一次后,以后就不执行了;
改为True,则只要在那个小时内就不停的循序;
public void AutoChoose()
        {
            System.Timers.Timer aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new ElapsedEventHandler(TimeEvent);
            //5分钟检查一次时间
            aTimer.Interval = 300000;
            //是否循环执行,还是执行一次
            aTimer.AutoReset = false;
            aTimer.Enabled = true;
        }
        private void TimeEvent(object source, ElapsedEventArgs e)
        {
            //获得现在的时间和星期几
            int NowHour = e.SignalTime.Hour;
            string NowWeek = BL.GetNowWeek();
            //获得制定的时间和星期几
            int aHour = BL.GetHour("");
            string aWeek = BL.GetWeek("");
            //每天执行
            if (aWeek == "everyday" && NowHour == aHour)
                StartExecJob();
            //每星期几执行
            else if (NowWeek == aWeek && NowHour == aHour)
                StartExecJob();
        }

解决方案 »

  1.   

    AutoReset设置为false是不行的。你可以记录一下,最后执行任务的时间,然后在每次比较这个时间,确定是否需要执行。
      

  2.   

    操作相关文件,成功后记录最后操作时间和日志
    该天存在记录不执行
    windows服务
      

  3.   

    设置一个flag,根据这个flag判断是否继续执行,再记录上一次运行的小时数。
    开始的时候flag是true,比如5点执行了一次,把flag设置成false,以后每次再判断现在到没到6点,如果没到,那就不管,如果到6点了,然后把flag设置成true。if(当前小时数 != 上次执行任务的小时数)
    {
        flag = true;
    }if(flag == true)

        if(执行任务成功)
         {
            flag = false;
             记录当前小时数
        }
         
    }
      

  4.   

    或者用计划任务。记录一次操作日志,生成一个当天日期命名的txt文档,检测到文档存在就不执行。
    FileStream fs = new FileStream("E:\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.Append);
            StreamWriter streamWriter = new StreamWriter(fs);
            streamWriter.BaseStream.Seek(0, SeekOrigin.End);
            streamWriter.WriteLine(DateTime.Now.ToString() + " " + "操作成功!");
            streamWriter.Flush();
            streamWriter.Close();
      

  5.   

    lastdate: 上次执行成功日期timer 运行时, 
    if(today != lasterdate)
    {
      //do}
      

  6.   

    Timer有没有什么属性或方法暂停计时,过一段时间后恢复计时呢?
      

  7.   

    Stop可停止计时,只是,你如何知道你什么时候该继续计时了?
      

  8.   

    单独的停止和开始的功能都有,但是先disable指定时间,然后再enable的功能好像是没有的。