当前位置: 代码迷 >> C# >> 请教怎么才能彻底结束System.Timers.Timer
  详细解决方案

请教怎么才能彻底结束System.Timers.Timer

热度:92   发布时间:2016-05-05 04:41:41.0
请问如何才能彻底结束System.Timers.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,我想要结束所有的。
------解决思路----------------------
你一个一个循环添加的,当然也要一个一个循环结束
哪里有"一次性结束全部atimer"这种东西

就是想图省事,你不如执行Application.Restart(),那么保证你创建的所有对象都重新初始化了
------解决思路----------------------
在你的 test 方法里,第一句话写
atimer.Stop();
最后一句话才写
atimer.Start();


实际上这是逻辑上的“懒惰”造成的。

如果是正规的逻辑设计,可能会说“如果派出的一个探子用了3秒钟打探来消息,那么就把下一个Interval设置为7秒钟;如果用了1秒钟,那么就设置为9秒钟;如果用了15秒,那么还是设置为10秒钟——最多10秒钟。”

或者是别的逻辑流程也可以。总之是更加具体地设计“可执行的”流程,而不是纠结“对错”问题。
  相关解决方案