您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> 请问如何才能彻底结束SystemTimersTimer

请问如何才能彻底结束SystemTimersTimer

来源:网络整理     时间:2016/5/21 6:06:02     关键词:system,stime

关于网友提出的“请问如何才能彻底结束SystemTimersTimer”问题疑问,本网通过在网上对“请问如何才能彻底结束SystemTimersTimer”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:请问如何才能彻底结束SystemTimersTimer
描述:

timer

由于业务需要,用了个计时器
使用的是System.Timers.Timer
其他一些设置相关的就不写了,
主要使用方式如下:

//声明一个atimer
System.Timers.Timer atimer = new System.Timers.Timer();
//定时执行test方法
atimer.Elapsed += new System.Timers.ElapsedEventHandler(test);

按照这个写法,假设我定时每10秒执行一次,也就是每10秒派出一个atimer去帮我打探消息(执行test方法),打探完以后回来给我报告。
但是打探消息(执行test方法)需要15秒,那么就会出现一种情况,当第一个atimer派出去以后,过了十秒,消息还没打探回来呢,第二个atimer就又被派出去了,这时候,如果第一个atimer打探的结果是我想要的,那我就想彻底结束所有的atmer,第二个被派出去的atimer我就不想让他回来了,这个该怎么实现呢?我用了stop或者设置enabled=false,但是这些只能结束我当前的这个atimer,不能结束别的已经派出去的atimer,我想要结束所有的。
解决方案1:

在你的 test 方法里,第一句话写

atimer.Stop();
最后一句话才写
atimer.Start();

实际上这是逻辑上的“懒惰”造成的。
如果是正规的逻辑设计,可能会说“如果派出的一个探子用了3秒钟打探来消息,那么就把下一个Interval设置为7秒钟;如果用了1秒钟,那么就设置为9秒钟;如果用了15秒,那么还是设置为10秒钟——最多10秒钟。”
或者是别的逻辑流程也可以。总之是更加具体地设计“可执行的”流程,而不是纠结“对错”问题。 解决方案2:

你一个一个循环添加的,当然也要一个一个循环结束
哪里有"一次性结束全部atimer"这种东西
就是想图省事,你不如执行Application.Restart(),那么保证你创建的所有对象都重新初始化了


以上介绍了“请问如何才能彻底结束SystemTimersTimer”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1210771.html

相关图片

相关文章