意思是,我有一个system.windows.forms.timer的Tick事件,如下:private void timer1_Tick(object sender, EventArgs e)
        {
            int i=0;//第1句
            i++;//第2句
            i--;//第3句
        }然后再此事件的执行过程中,比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事件中将tiemr1的Enabled设为false也会返回执行timer1_Tick事件中的剩余语句)。
请问能不能在中间跳出timer1_Tick事件后不再返回来执行剩下的语句?

解决方案 »

  1.   

    bool isreturn = false;
    private void timer1_Tick(object sender, EventArgs e)
            {
                int i=0;//第1句
    if(isreturn) return;
                i++;//第2句
                i--;//第3句
            }Button_Click(..)
    {
    isreturn = true;
    }
      

  2.   

    那岂不是timer1_Tick事件中的每一条语句前面都要加判断?
      

  3.   

    能不能在timer1_Tick事件被打断去执行其他语句时不再返回执行timer1_Tick事件中剩余的语句?
      

  4.   

    楼主的意思是说一旦执行了你所谓的新的button的事件后,现有timer事件就不再执行,也就是timer控件不再起任何作用了,对不?
    如果是这样的话,一楼就完全能满足你的要求的呀。不存在说是每一条语句都要加。
    if(isreturn) return;这句话放到timer1_Tick方法中的第一行,不就OK了吗。你再好好理理思路吧,估计是你没理解咱们的意思。
      

  5.   

    不好意思,之前没太看清楚你的意思,不过现在看清楚了,原来你是希望点button之前,timer就已经开始执行timer1_Tick内的事件。
    然后点了button后不再执行其它还未执行的事件。
    而且我看你的意思,好像是:点button按钮时,timer_Tick中调用的事件的个数还不是固定的。这样的话,只能在每个调用事件前一个个加之前的那句话了。
    1.使用timer.Enabled属性用于设置是否启用定时器。
    2.timer1.Stop();方法是用于停止计时。
    但是以上两种方式都只是让你的timer控件不再起到作用而已。但是对于已经进入到timer1_tick中的事件是不会终止的。因为你没法控制到底程序要执行哪个事件时终止里面的方法呀。除非timer1_tick中的调用的方法就已经有结束timer作用的逻辑(具体还会不会继续下面的其它方法我没试。你自己试试)。
      

  6.   

    这样 即使当前的 timer 事件 没有处理完 
    时间到了 也会触发下一个 timer事件你想在timer事件里面 提前返回
    就用return
      

  7.   

    或者不用Timer,改用线程自己控制线程经度。
      

  8.   

    如果是简单应用的话,线程真的不难,msdn上看看就好了,几小时就ok了
      

  9.   

    timer1.Stop();可以终止时钟,但当前的timer1_Tick事件无法停止