谁遇到过Forms.Timer enable=false之后,又自动变成true的情况?

泡泡龙 2013-11-20 09:37:05
我定义了一个public类tPub,里面有个forms.timer定时器,类初始化的时候,会建立这个定时器,并Enable=false。

我在另一个类里面,有个public 静态变量tt=null(tt的定义是在类里面,不是在功能函数里面)。还有个UI界面按钮指向的void函数,这个函数检测tt是不是null,并初始化tt=new tPub(),设置Enable=true,启动定时器。

现在的问题是,当我执行停止定时器的命令,设置那个tt的定时器为false,发现尽管跟踪代码设置成功,但是并没有停止这个定时器的运行,定时器依然在工作,并且自动把Enable给改成了True,甚至tt=null都不能成功停止定时器。


我把tt这个变量,从 public static tPub tt=null 改成public static tPub tt=new tPub(),(在类里面进行初始化,而不是在功能函数里面)定时器就可以被正常关闭了,这是啥原因造成的,谁遇到过?


为什么tt这个变量不能在函数里面做初始化呢?

谁遇到过定时器自己重新启动的问题?有帖子说tick事件会重启定时器,是这样吗?




...全文
310 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡龙 2013-11-22
  • 打赏
  • 举报
回复
引用 12 楼 dongxinxi 的回复:
不是不能在函数里初始化,而是你对你写的程序时序完全搞不清楚 public static tPub tt=new tPub()会在加载程序集后,初始化所属的类时执行(调用类里的任何方法之前)
问题就是这个,为什么在初始化类的时候,初始化定时器就没事。而在类里面的方法调用就不行?
nm8222157 2013-11-22
  • 打赏
  • 举报
回复
记忆中用过timer这个控件 但是 我怎么记得 他的结束语句时要调用一个句柄的结束方法 timer是不是自己在一个线程里 而不是你在其他线程里说结束就能结束的 timer1.Elapsed+=new ElapsedEventHandler(这里写你在结束时的回调函数) 记得是这样 哪个大神知道 帮顶!!
  • 打赏
  • 举报
回复
不是不能在函数里初始化,而是你对你写的程序时序完全搞不清楚 public static tPub tt=new tPub()会在加载程序集后,初始化所属的类时执行(调用类里的任何方法之前)
卧_槽 2013-11-22
  • 打赏
  • 举报
回复
引用 10 楼 liucqa 的回复:
[quote=引用 9 楼 yuwenge 的回复:] Start()方法会把enable设为true.
问题是Stop之后,并没有执行Start[/quote] 一步一步F11调试,监控enable属性,看看到底哪一句之后变化了。
卧_槽 2013-11-21
  • 打赏
  • 举报
回复
Start()方法会把enable设为true.
泡泡龙 2013-11-21
  • 打赏
  • 举报
回复
莫非静态的定时器会有什么特殊之处? 哪位大虾用过?
泡泡龙 2013-11-21
  • 打赏
  • 举报
回复
引用 9 楼 yuwenge 的回复:
Start()方法会把enable设为true.
问题是Stop之后,并没有执行Start
泡泡龙 2013-11-20
  • 打赏
  • 举报
回复
引用 6 楼 hdhai9451 的回复:
你把代码帖出来看看


定时器类


调用


由于我这个是Excel的加载项,在Excel里面运行的时候,才会出现这个奇特的问题。

不过,即使貌似与Excel有关,但问题实质应该还是出在定时器的线程上,或许用二楼链接的代码测试会更方便些。
除非,我和二楼的都犯什么错误了

Andy__Huang 2013-11-20
  • 打赏
  • 举报
回复
你把代码帖出来看看
泡泡龙 2013-11-20
  • 打赏
  • 举报
回复
引用 3 楼 hdhai9451 的回复:
Timer.Enabled是Timer的一个属性,你应该在类tPub里面设置两个方法Start()和Stop()来启动和停止定时器,而不是外面调用Timer的Enabled属性,外部你虽然改了Enabled属性,但是纯种仍然在运行.也就是你改的那个属性无效.
是的,我的程序就是在定时器的那个类里面写了start和stop两个方法,外部类都是调用的这个方法。 我的问题是为什么我在定义变量的同时初始化类,就没有这个timer enable重新变成true的问题呢?其余语句毫无变化。
泡泡龙 2013-11-20
  • 打赏
  • 举报
回复
引用 2 楼 guwei4037 的回复:
timer不会自己重新启动的,除非你设置了timer.Enable=true;. 肯定是你的程序问题。
看一下二楼的那个链接,和我遇到的是一个问题。 在我的程序里面,只有一个地方设置了enable=true,其余地方再无此语句。设断点,此语句肯定未执行过。 而Enable=false单步跟踪肯定是成功的。
Andy__Huang 2013-11-20
  • 打赏
  • 举报
回复
Timer.Enabled是Timer的一个属性,你应该在类tPub里面设置两个方法Start()和Stop()来启动和停止定时器,而不是外面调用Timer的Enabled属性,外部你虽然改了Enabled属性,但是纯种仍然在运行.也就是你改的那个属性无效.
全栈极简 2013-11-20
  • 打赏
  • 举报
回复
timer不会自己重新启动的,除非你设置了timer.Enable=true;. 肯定是你的程序问题。
泡泡龙 2013-11-20
  • 打赏
  • 举报
回复
哦,对了,这个tt变量是静态变量 下面这个帖子说了这个问题,但我不理解原因是什么? 为什么我把new语句放到变量定义哪里,就没问题了呢? http://blog.csdn.net/nma_123456/article/details/11681793

110,545

社区成员

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

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

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