System.Threading.Timer 执行完当前任务再进行下一个任务

执道而行 2014-07-03 04:53:28
使用System.Threading.Timer 创建了一个每隔一秒执行一次的线程
要执行的任务是通过webservice来获取当前的数据

但是有时候webservice返回数据的时间会超过1秒,有时甚至是几十秒
这个时候如果1秒内没有执行完, System.Threading.Timer 就会再开一个新的线程

我在输出信息的时候发现,获取到的数据经常会连着好几条是同一个时间点的
并且有时候突然返回一条好几秒前的数据

我是想 能不能让System.Threading.Timer 等获取完这一次数据后 再进行下一次获取
...全文
1222 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangkang08 2014-07-03
  • 打赏
  • 举报
回复
System.Timers.Timer tm = new System.Timers.Timer(intelval); tm.Elapsed += (sender, e) =>{ System.Timers.Timer t = sender as System.Timers.Timer; t.Enable = false; ///TODO:你需要的业务 t,Enable = true; });
  • 打赏
  • 举报
回复 1
定时器重入问题 try { timer.Stop(); invokeWebService(); } finnally { timer.Start(); }
zhengnan2012 2014-07-03
  • 打赏
  • 举报
回复
我建议楼主处理后面的结果就行了.本来远程调用你如果非要等返回了结果再来执行下一次,那么这个你可以不用timer来处理,就直接同步主法就可以搞定. 建议远程这种还是异步好.
周美文 2014-07-03
  • 打赏
  • 举报
回复
加个标记不就好了吗
执道而行 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 fengduole 的回复:
我做过类似的东西,也是用WebBrowser抓数据。 我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。 不知能否满足你的要求。
这个也是我目前能想到的唯一的方法 我对线程不大了解,没敢乱用,所以来求助的
fengduole 2014-07-03
  • 打赏
  • 举报
回复
我做过类似的东西,也是用WebBrowser抓数据。 我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。 不知能否满足你的要求。

111,092

社区成员

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

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

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