c#中的system.windows.forms.timer的Tick事件中的操作必须执行完吗?

时间:2021-11-09 20:38:06
意思是,我有一个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事件后不再返回来执行剩下的语句?

15 个解决方案

#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


引用 1 楼 sprc_lcl 的回复:
bool isreturn = false;
private void timer1_Tick(object sender, EventArgs e)
        {
            int i=0;//第1句
if(isreturn) return;
            i++;//第2句
            i--;//第3句
        }

Bu……

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

#3


引用楼主 yanghe1117 的回复:
意思是,我有一个system.windows.forms.timer的Tick事件,如下:

比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事件中将tiemr1的Enabled设为false也会返回执行timer1_Tick事件中的剩余语句)。


有问题吗?本身就是这样的顺序

#4


引用 3 楼 cherishny 的回复:
引用楼主 yanghe1117 的回复:
意思是,我有一个system.windows.forms.timer的Tick事件,如下:

比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事……

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

#5


引用 4 楼 yanghe1117 的回复:
能不能在timer1_Tick事件被打断去执行其他语句时不再返回执行timer1_Tick事件中剩余的语句?

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

#6


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

#7


路过,学习学习。

#8


这样 即使当前的 timer 事件 没有处理完 
时间到了 也会触发下一个 timer事件

你想在timer事件里面 提前返回
就用return

#9


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

#10


线程好,timer是基于消息的

#11


还有其他的方法没?难道必须要用线程才能实现吗? c#中的system.windows.forms.timer的Tick事件中的操作必须执行完吗?饿还不会用线程那

#12


引用 11 楼 yanghe1117 的回复:
还有其他的方法没?难道必须要用线程才能实现吗?饿还不会用线程那

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

#13


那就用return

#14


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

#15


还是没实现,只好return了

#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


引用 1 楼 sprc_lcl 的回复:
bool isreturn = false;
private void timer1_Tick(object sender, EventArgs e)
        {
            int i=0;//第1句
if(isreturn) return;
            i++;//第2句
            i--;//第3句
        }

Bu……

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

#3


引用楼主 yanghe1117 的回复:
意思是,我有一个system.windows.forms.timer的Tick事件,如下:

比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事件中将tiemr1的Enabled设为false也会返回执行timer1_Tick事件中的剩余语句)。


有问题吗?本身就是这样的顺序

#4


引用 3 楼 cherishny 的回复:
引用楼主 yanghe1117 的回复:
意思是,我有一个system.windows.forms.timer的Tick事件,如下:

比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事……

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

#5


引用 4 楼 yanghe1117 的回复:
能不能在timer1_Tick事件被打断去执行其他语句时不再返回执行timer1_Tick事件中剩余的语句?

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

#6


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

#7


路过,学习学习。

#8


这样 即使当前的 timer 事件 没有处理完 
时间到了 也会触发下一个 timer事件

你想在timer事件里面 提前返回
就用return

#9


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

#10


线程好,timer是基于消息的

#11


还有其他的方法没?难道必须要用线程才能实现吗? c#中的system.windows.forms.timer的Tick事件中的操作必须执行完吗?饿还不会用线程那

#12


引用 11 楼 yanghe1117 的回复:
还有其他的方法没?难道必须要用线程才能实现吗?饿还不会用线程那

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

#13


那就用return

#14


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

#15


还是没实现,只好return了