System.Timers.Timer停不下来?

yzy8788 2010-06-13 07:58:11
Timers.Timer Timer1 = new Timers.Timer(1000);
当Timer1正在繁忙的时候,好像用Timer1.Stop()或Timer1.Enabled=false;都停不下来这个时钟,Timer1继续干活。
有什么好的办法,可以让其停下来呢?
...全文
666 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在 Elapsed 处理方法中,第一句话应该是调用 Timer 的 Stop 方法,最后一句话应该是调用 Timer 的 Start 方法,你作对了吗?
jianuMan 2010-06-18
  • 打赏
  • 举报
回复
Timer的作用是 一定间隔时间 触发某个事件,
Timer。Stop() 是保证下次时间间隔到了 也不会促发timer 时间
并不是让当前未完成的timer事件 停止
如果你想停止当前事件的话,应该用线程调用。
宇峰科技 2010-06-18
  • 打赏
  • 举报
回复
学习。。。。
simonezhlx 2010-06-18
  • 打赏
  • 举报
回复
定时器的开关逻辑应该放在 Elapsed 处理方法中
  • 打赏
  • 举报
回复
一楼其实已经解释清楚了

通俗点讲,就是不是timer本身去定时运行代码,timer其实只是一个系统的滴答而已,到点了它就去启动一个线程压入到线程池去执行代码。

所以你会发现,在系统忙碌的时候,timer好像不准,就是因为可能在线程池里排队,没有及时运行。
还有就是如果你的代码执行时间很长,就有可能前一次还没执行完成,后一次又开始了。

导致这些现象的原因就是我上面的说的原理导致的。
leavemaple 2010-06-15
  • 打赏
  • 举报
回复
public 方法()
{
Timers.Timer Timer1 = new Timers.Timer(1000);
}
这样肯定停止不了

private static Timers.Timer timer1 ;
public Form_Load()
{
timer1 = new Timers.Timer(1000);
}
这样才可以停止,你说停止不了,是因为你每次都new了一个timer吧,你所要停止的timer,并不是你之前new的那个timer,所以造成了STOP ENABLE = FALSE;都无法停止。
jianshao810 2010-06-13
  • 打赏
  • 举报
回复
能不能直接将事件去除
xray2005 2010-06-13
  • 打赏
  • 举报
回复
你的代码怎么写的?贴上来看看。
wuyq11 2010-06-13
  • 打赏
  • 举报
回复
System.Timers.Timer timer = new System.Timers.Timer();
public Form1()
{}
类中使用
委托异步调用
捷哥1999 2010-06-13
  • 打赏
  • 举报
回复
这个问题,第二次遇到了。

看 system.timers.timer.stop 的帮助
http://msdn.microsoft.com/zh-cn/library/system.timers.timer.stop%28v=VS.100%29.aspx

说明


Elapsed 事件在 ThreadPool 线程上引发,因此事件处理方法可以运行在一个线程上,同时 Stop 方法调用运行在另一个线程上。这可能导致在调用 Stop 方法后引发 Elapsed 事件。此主题的代码示例演示了一种防止争用条件的方法。

110,533

社区成员

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

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

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