非常简单的一个需求,我有一个方法 A,该方法执行我需要的操作.。执行完毕之后,间隔一段时间
再去自动执行。 要求是,我必须要保证方法A 执行完毕之后,再去间隔一段时间,自动执行。用 timer 类的请考虑,假如你用timer定义间隔多久自动执行,因为我方法A执行完成需要的时间是不固定的,根据数量的大小而来的.比如我这次 方法A 执行完成需要 5分钟,下次有可能是10分钟.那么问题来了,比如我timer设定的间隔时间是 3分钟,而我方法执行完毕要5分钟,是不是会出现 当我 方法A 还没执行完成,timer间隔时间到了,又重复执行方法A.这样会发生很严重的错误。因为我有些数据是必须要等 方法 跑完之后,才能去重新执行。
.小弟不才,目前我用到的 开启一个线程线,程里用一个死循环,执行方法A。执行完成之后,在把线程 sleep一段时间,用这种方式。求各位高手指点有没有更好的方法.

解决方案 »

  1.   

    你等程序执行完了在去启动这个timer计时器不就OK了?!
      

  2.   

    如果真相用timer的话,可不可以这样子满足你?
    设置一个变量flag 标志A在执行,如果执行中则设置flag为true,否则为flase。那么在A执行前先判断如果flag为true那么就不执行了,否则就执行。
    这样你的timer就一直那样设置下去。。大不了下一个时间片来的时候再来执行。。
      

  3.   

    我觉得timer是执行程序的时间间隔,你函数执行的时间应该不会算到timer里面的,楼主可以把timer的时间间隔设置成5秒,在timer里面的函数sleep 10秒,自己测试下
      

  4.   

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Timer1.Stop()
            Try        Catch ex As Exception        End Try
            Timer1.Start()
        End Sub
      

  5.   

    函数执行的时间算不算到 timer 里面 你自己测试下就就知道了 
      

  6.   

    自动执行还要考虑程序退出的问题,在退出时,需要不再执行循环或timer,不然就会报错,用timer或用阻塞都可以,只要退出时做相应设置即可,thread.sleep的方式在此不适用。
    我个人喜欢阻塞方式,给你个例子  ManuRestEvent _Evt=new ManuResetEvent(false);
      bool _IsQuit=false;
      ...  do
      {
         DoMyMethod();
          if(_Evt.WaitOne(30000))  //延迟的时间
          {
            break;
         }  }while(!_IsClose)
      ...
      DoQuit()
      {
        _IsClose=true;  
        _Evt.Set();
        
      }   
      
      

  7.   

    使用阻塞方式可以保证只有执行完后才开始定时执行下次方法,而timer就需要在执行期间暂停timer,待执行完后再启动timer, 但timer不需要长期占用一条线程,比较省资源,因此在服务器应用这种对内存要求较高的应用最好用timer,而客户端应用可以用阻塞(比较简单易读)。
      

  8.   

    用Threading.Timer,运行时用.Change(0, -1)//立即运行,并且只运行一次
    在功能过程执行代码最后写上.Change(X, -1)//X为再次运行的时间间隔
    你考虑下,很简单的