计时器已经Stop,为什么还要循环执行

wr34545 2014-07-20 05:20:48
一个Timer,已经执行了Stop方法,为什么为什么Timer的IsEnabled还为true呢?就算强制把IsEnabled设为false,结果还是true,这是什么原因呢?

下面是强制把IsEnabled设为false的图片:

...全文
424 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxrenren2006 2015-07-30
  • 打赏
  • 举报
回复
我也遇到类似问题,错误比较低端,不知道跟楼主问题一不一样,但希望可以帮到一些人。 问题出在我把timer.Tick += new EventHandler(FUNC);放在了按钮事件函数中了,这样,我每按一次按钮,就会new一个新的定时事件函数,第二次按按钮时,会有两个同样的FUNC在排队,第N次,就有N个在排队。所以即使执行了timer.IsEnabled = false;排在后面的FUNC还是会再次被触发。 解决办法就是将timer.Tick += new EventHandler(FUNC)放在主页面加载函数中就好了。
於黾 2014-07-21
  • 打赏
  • 举报
回复
你确定执行了return之后,程序不会走到}的地方? 经我自己测试,执行return,就是相当于goto},而不是直接跳出函数 你去掉if,或将断点设置在给timer赋值的地方再试
敌敌畏耶 2014-07-21
  • 打赏
  • 举报
回复
直接return了吧···你的if语句···
明天上班 2014-07-21
  • 打赏
  • 举报
回复
有可能是return掉了没有执行,还有个可能是你到哪里start()了。
wr34545 2014-07-21
  • 打赏
  • 举报
回复
引用 6 楼 happy09li 的回复:
你那代码放在return后面了,不会执行的
执行了的啊,图上的断点,你没看见吗?断点放在方法的结尾处,执行了Stop方法的
PaulyJiang 2014-07-21
  • 打赏
  • 举报
回复
return 了
熙风 2014-07-21
  • 打赏
  • 举报
回复
你那代码放在return后面了,不会执行的
宝_爸 2014-07-21
  • 打赏
  • 举报
回复
我简单些了个小测试程序,没发现你说的问题

        private void button1_Click(object sender, EventArgs e)
        {
            testTimer = new System.Timers.Timer(2000);
            testTimer.Elapsed += testTimer_Elapsed;
            testTimer.Start();

            timer1.Start();
            
        }

        void testTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            testTimer.Stop();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
        }
testTimer是System.Timers.Timer. time1是System.Windows.Forms.timers
於黾 2014-07-21
  • 打赏
  • 举报
回复
跟踪一下if里面的值,是否执行了return?
wr34545 2014-07-21
  • 打赏
  • 举报
回复
有人知道吗?
wr34545 2014-07-21
  • 打赏
  • 举报
回复
基类构造函数执行了2次,这是为什么呢,我只new了一个派生类对象
wr34545 2014-07-21
  • 打赏
  • 举报
回复
这是个基类。有一个派生类对象。 不应该是这个原因吧
wr34545 2014-07-21
  • 打赏
  • 举报
回复
引用 20 楼 wawd74520 的回复:
如果你按f5 还能到这个断点,那么你是在哪个位置又开了这个计时器。
我修改了timer的名称,并在整个解决方案搜索,确实没有在其它地方Start这个计时器。
失落的神庙 2014-07-21
  • 打赏
  • 举报
回复
如果你按f5 还能到这个断点,那么你是在哪个位置又开了这个计时器。
失落的神庙 2014-07-21
  • 打赏
  • 举报
回复
是你断点问题。 stop后肯定到大括号撒。
lc_ant 2014-07-21
  • 打赏
  • 举报
回复
那你肯定 if 条件是true了 直接return了
火拼阿三 2014-07-21
  • 打赏
  • 举报
回复
是不是进return了
wr34545 2014-07-21
  • 打赏
  • 举报
回复
引用 15 楼 Z65443344 的回复:
把你定义Timer的地方发出来 怀疑你变量名错误 函数名叫Timer_Tick,变量名叫timer 你确定Timer_Tick是timer的回调函数?

 public CountdownControl()
       {
           DicDateTimeQiShu = new Dictionary<TimeSpan, string>();
           timer = new DispatcherTimer();
           timer.Interval = new TimeSpan(0, 0, 0, 0,200); //200毫秒执行一次
           timer.Tick += Timer_Tick;
           timer.Start();
       }
  DispatcherTimer timer;
函数应该是没有问题的。 我上面都说了,去掉if语句,就一切正常,不会再循环执行。 那if语句能有什么影响呢,仅仅是几个等号判断而已
於黾 2014-07-21
  • 打赏
  • 举报
回复
把你定义Timer的地方发出来 怀疑你变量名错误 函数名叫Timer_Tick,变量名叫timer 你确定Timer_Tick是timer的回调函数?
蹦极的馒头 2014-07-21
  • 打赏
  • 举报
回复
是不是你在多线程中都处理了跟定时器相关的操作,导致你这里的stop操作时,有并发定时器的其他操作,于是定时器内部处于不可stop的状态,但是该stop操作是不会有任何返回值来响应状态
加载更多回复(4)

110,568

社区成员

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

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

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