C#定时器里面调试代码,注意在调试的时候
设置定时器interval为10S,你在按F11的时候10S后又会调到调试点,如果设置interval为1S的话,就会不停地返回调试点,感觉在时间到了之后就自动创建线程。...
设置定时器interval为10S,你在按F11的时候10S后又会调到调试点,如果设置interval为1S的话,就会不停地返回调试点,感觉在时间到了之后就自动创建线程。。
我这样的理解对吗 展开
我这样的理解对吗 展开
2个回答
展开全部
是的
如果你没有停止定时器,那么它就会按照你设定的时间按时开启Tick事件。
举个例子,你的定时器interval设定为1S,但是在你的Tick事件里需要执行的代码至少需要1.5S才能执行完毕,那么问题就来了。
代码还没执行完毕,1S就已经过去了,那么就会开启下一个Tick事件,而还未完成的Tick事件则会继续执行,这样就会有两个线程在执行。但是这样是不好的,一般会造成竞争和程序堵塞,当你关闭程序窗口后,实际后台运行的线程还没关闭。
处理这种情况,根据我的一些做法,一般就两种:
一是在程序里加入明确的线程停止的标记,一旦达到这个条件就开始关闭该线程。
二是如果你确认线程达到某个时候就一定会关闭的话,那么你可以考虑将interval设定的更大一些以是程序有足够时间等待该线程结束。
如果你没有停止定时器,那么它就会按照你设定的时间按时开启Tick事件。
举个例子,你的定时器interval设定为1S,但是在你的Tick事件里需要执行的代码至少需要1.5S才能执行完毕,那么问题就来了。
代码还没执行完毕,1S就已经过去了,那么就会开启下一个Tick事件,而还未完成的Tick事件则会继续执行,这样就会有两个线程在执行。但是这样是不好的,一般会造成竞争和程序堵塞,当你关闭程序窗口后,实际后台运行的线程还没关闭。
处理这种情况,根据我的一些做法,一般就两种:
一是在程序里加入明确的线程停止的标记,一旦达到这个条件就开始关闭该线程。
二是如果你确认线程达到某个时候就一定会关闭的话,那么你可以考虑将interval设定的更大一些以是程序有足够时间等待该线程结束。
追问
恩,调试的时候如何将定时器先停止啊,那我自己写的Timers.timer定时器属于后台线程吗? 我看到有人这样说“手动新开一个线程会增大程序开启线程的数量,默认是前台线程”,这个对吗? t.isbackground是可以设置的吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-12-26 · 知道合伙人互联网行家
关注
展开全部
定时器利用的是消息机制,是在后台运行的,你设断点的时候,时间还在计算,到时间还会继续走定时器的。通常定时器使用是 进入定时器 先将定时器停止,然后直行所有代码完毕后 再将定时器开启
更多追问追答
追问
恩,调试的时候如何将定时器先停止啊,那我自己写的Timers.timer定时器属于后台线程吗? 我看到有人这样说“手动新开一个线程会增大程序开启线程的数量,默认是前台线程”,这个对吗? t.isbackground是可以设置的吧。
追答
isbackground设置为true 就是后台线程了,调试的时候 你就timer的tick事件 先写上 timer.stop()然后 等执行完了 在start()就行了啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询