winform中的定时器Enable设置为false后再次改为true后,定时器不启动定时监听

Sanfhhhh 2019-03-25 03:03:47
在winform中添加了个定时计算的功能,每到0点定时启动计算程序

这个timer的interval是50分钟,为了测试把interval改成5s。
在timer的事件中,监听到满足时间要求的话,设置timer.Enable=false,为了防止计算的时候还会重复触发这个监听事件,然后启动两个个线程一个是计算线程,另一个线程判断计算是否结束,如果结束了设置为timer.Enable=ture,重新启动timer,单是一旦Enable设置为false后再设置为true,timer.start这个定时器的监听事件都无法生效了。(简单说就是timer的enable设为false后无法二次启动),这是什么原因啊。
...全文
743 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sanfhhhh 2019-04-02
  • 打赏
  • 举报
回复
引用 7 楼 visir 的回复:
会不会是跨线程的问题, 你可以试下 Form.Invoke(new Action(delegate(){ timer.Start(); }));
不太清楚- -会不会是跨组件?如果在一个函数里的if,else里修改enable是可以正常启动、停止定时器的。
Sanfhhhh 2019-04-02
  • 打赏
  • 举报
回复
引用 6 楼 智者知已应修善业 的回复:
也就是说定时器间隔多少时间去读系统时间,到时间就设置一个状态执行事件,时间执行完毕把状态再设置回去,不需要停止定时器。
现在改成这种方法的,用一个布尔变量控制是否执行,停止定时器
visir 2019-03-27
  • 打赏
  • 举报
回复
会不会是跨线程的问题, 你可以试下 Form.Invoke(new Action(delegate(){ timer.Start(); }));
  • 打赏
  • 举报
回复
也就是说定时器间隔多少时间去读系统时间,到时间就设置一个状态执行事件,时间执行完毕把状态再设置回去,不需要停止定时器。
  • 打赏
  • 举报
回复
任何电脑都可以读取系统时间,不是?只要判断系统时间与设定的时间即可。
Sanfhhhh 2019-03-25
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业 的回复:
启动定时器干嘛?获取系统时间作为判断即可,画蛇添足? 读取系统时间判断到了,设置一个状态即可。
这个需要放在服务器上,每天定时启动
Sanfhhhh 2019-03-25
  • 打赏
  • 举报
回复
引用 1 楼 以专业开发人员为伍 的回复:
“然后启动两个线程”是什么意思?为什么要有第二个线程?
我新手小白,不好意思,启动第一个线程计算数据,这个线程里面又new很多其他子线程计算数据,数据量大。第二个线程来判断第一个线程中所有的子线程计算是否结束。
  • 打赏
  • 举报
回复
启动定时器干嘛?获取系统时间作为判断即可,画蛇添足?
读取系统时间判断到了,设置一个状态即可。
  • 打赏
  • 举报
回复
“然后启动两个线程”是什么意思?为什么要有第二个线程?

110,538

社区成员

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

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

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