假设定时器时间间隔为1秒,当定时器中执行的程序满足某条件时,需要定时器暂停2秒,然后再继续执行后面的语句,如果使用Thread.Sleep(2000),没有任何意义,请问用什么办法可以实现这个效果呢?定时器sleep

解决方案 »

  1.   

    Thread.Sleep(2000)为什么没意义,应该是暂停了2秒再执行后面的代码啊
    你是想暂停后定时器也往后顺延2秒吗?那你先先timer1.Interval+=2000后再Thread.Sleep(2000),并用一个变量标记为true,然后进入timer1_ticks时看这个变量标记为true再把timer1.Interval-=2000;同时变量标记为false
      

  2.   

    上代码吧
    private bool m_bFlag=false;
    private void timer1_Ticks(....)
    {
        if(m_bFlag)
           timer1.Interval-=2000;
        
        if(需要暂停2秒条件成立)
        {
             timer1.Interval+=2000;
             m_bFlag=true;
             Thread.Sleep(2000);
        }
    }
      

  3.   

    很简单,你后面的语句,可以写在void f2()这个函数里面(别偷懒,觉得这样复杂,只要能实现功能就好了。日后有新思路再优化吧)。当条件到了,你用个定时器(只定时一次,时间为2秒的,因为,2秒后,第一件事就是关闭这个定时器)。定时器里面放这个f2()这个函数当然,你可以用定时器+标志位的思路来解决这个问题,这点是我借鉴下位机的编程来实现的。关于定时器方面的好的经验总结,可以加我QQ742852872,欢迎交流。我们都在不断学习中
      

  4.   

    用 timer控件,你就可以做到这一点。
      

  5.   

    什么叫做“暂停2秒”啊?本来就是动态改变 Interval 属性的概念,让你给搞成挺神秘的东西了。
      

  6.   

    而如果是 Threading.Timer,那么就是调用 Change(2000,1000)。
    你的思路打不开,非要说“定时器暂停,而暂停之后又要从中间执行定时器的处理程序”,这就纠结起来了。那么还不如用最笨的办法整两个定时器好了,如果这样能让你搞清楚“谁是谁的定时器”的问题的话也挺好。