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

zhiheyang 2010-07-01 10:34:35
意思是,我有一个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事件后不再返回来执行剩下的语句?
...全文
351 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiheyang 2010-07-05
  • 打赏
  • 举报
回复
还是没实现,只好return了
ZGodF 2010-07-01
  • 打赏
  • 举报
回复
路过,学习学习。
llddyy123wq 2010-07-01
  • 打赏
  • 举报
回复
不好意思,之前没太看清楚你的意思,不过现在看清楚了,原来你是希望点button之前,timer就已经开始执行timer1_Tick内的事件。
然后点了button后不再执行其它还未执行的事件。
而且我看你的意思,好像是:点button按钮时,timer_Tick中调用的事件的个数还不是固定的。这样的话,只能在每个调用事件前一个个加之前的那句话了。
1.使用timer.Enabled属性用于设置是否启用定时器。
2.timer1.Stop();方法是用于停止计时。
但是以上两种方式都只是让你的timer控件不再起到作用而已。但是对于已经进入到timer1_tick中的事件是不会终止的。因为你没法控制到底程序要执行哪个事件时终止里面的方法呀。除非timer1_tick中的调用的方法就已经有结束timer作用的逻辑(具体还会不会继续下面的其它方法我没试。你自己试试)。
llddyy123wq 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yanghe1117 的回复:]
能不能在timer1_Tick事件被打断去执行其他语句时不再返回执行timer1_Tick事件中剩余的语句?
[/Quote]
楼主的意思是说一旦执行了你所谓的新的button的事件后,现有timer事件就不再执行,也就是timer控件不再起任何作用了,对不?
如果是这样的话,一楼就完全能满足你的要求的呀。不存在说是每一条语句都要加。
if(isreturn) return;这句话放到timer1_Tick方法中的第一行,不就OK了吗。你再好好理理思路吧,估计是你没理解咱们的意思。

zhiheyang 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cherishny 的回复:]

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

比如执行到了第2句,我去点击了一个按钮,此时程序会去执行按钮的click事件(对吧?我试的是这样的),在该click事件处理完后,程序又会返回执行timer1_Tick事件中的第2句,第3句一直到执行完timer1_Tick事件。(即使在按钮的Click事……
[/Quote]
能不能在timer1_Tick事件被打断去执行其他语句时不再返回执行timer1_Tick事件中剩余的语句?
Cherishny 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 yanghe1117 的回复:]
意思是,我有一个system.windows.forms.timer的Tick事件,如下:

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

有问题吗?本身就是这样的顺序
zhiheyang 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]
那岂不是timer1_Tick事件中的每一条语句前面都要加判断?
sprc_lcl 2010-07-01
  • 打赏
  • 举报
回复
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;
}
rabbit5 2010-07-01
  • 打赏
  • 举报
回复
timer1.Stop();可以终止时钟,但当前的timer1_Tick事件无法停止
zhpj948064359 2010-07-01
  • 打赏
  • 举报
回复
那就用return
Jellyfancy 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yanghe1117 的回复:]

还有其他的方法没?难道必须要用线程才能实现吗?饿还不会用线程那
[/Quote]
如果是简单应用的话,线程真的不难,msdn上看看就好了,几小时就ok了
zhiheyang 2010-07-01
  • 打赏
  • 举报
回复
还有其他的方法没?难道必须要用线程才能实现吗?饿还不会用线程那
Jellyfancy 2010-07-01
  • 打赏
  • 举报
回复
线程好,timer是基于消息的
nay6163 2010-07-01
  • 打赏
  • 举报
回复
或者不用Timer,改用线程自己控制线程经度。
jianuMan 2010-07-01
  • 打赏
  • 举报
回复
这样 即使当前的 timer 事件 没有处理完
时间到了 也会触发下一个 timer事件

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

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧