当前位置: 代码迷 >> C# >> winform里面的定时器如何还执行
  详细解决方案

winform里面的定时器如何还执行

热度:73   发布时间:2016-05-05 03:44:12.0
winform里面的定时器怎么还执行
如题 
C# 
在一个窗体里面放了一个timer1定时器,有一个方法1妙执行一次,产生一个日志
窗体关闭后,发现这个定时器还在执行,这是怎么回事呢.难道定时器不是窗体的一个控件,不随窗体关闭时一起消失?
------解决思路----------------------
定时器是一个组件,其工作时有自己的内部线程,Timer本身有Close、Dispose方法释放其占用的资源。
窗体关闭前要把Timer的Enabled设置为false。
------解决思路----------------------
引用:
Quote: 引用:

定时器是一个组件,其工作时有自己的内部线程,Timer本身有Close、Dispose方法释放其占用的资源。
窗体关闭前要把Timer的Enabled设置为false。


我在关窗事件里写了
this.timer1.Stop()
然后关闭窗体后发现不产生日志了.怎么还有enabled这个是做什么用的


Enabled中文的意思是:启用
------解决思路----------------------
Enabled设置为true就执行start,设置为false就执行stop,这个属性内部应该有封装相关动作
------解决思路----------------------
窗口里的定时器是不是自动销毁,要看你的窗口会不会被 GC 销毁。这就要就看你的窗口的“引用”的方式。跟你是否调用 Close 方法没有关系。

不过这恰好说明了你的程序很可能有内存泄漏问题。
------解决思路----------------------
引用:
Quote: 引用:

定时器是一个组件,其工作时有自己的内部线程,Timer本身有Close、Dispose方法释放其占用的资源。
窗体关闭前要把Timer的Enabled设置为false。


我在关窗事件里写了
this.timer1.Stop()
然后关闭窗体后发现不产生日志了.怎么还有enabled这个是做什么用的
意思就是这个定时器可用还是不可用,简单的来说就是true就是你让他启动正常工作,false就是禁用了。
------解决思路----------------------
要自己释放掉的。
------解决思路----------------------
引用:
Quote: 引用:

Enabled设置为true就执行start,设置为false就执行stop,这个属性内部应该有封装相关动作


很纠结,既然有start()和stop()那又怎么会有enabled这个属性

那2个函数只是在给enabled赋值true和false而已
没有这个属性,你怎么查看当前timer到底可用还是不可用?

只见过只读属性,只写属性有意义?
------解决思路----------------------
引用:
Quote: 引用:

窗口里的定时器是不是自动销毁,要看你的窗口会不会被 GC 销毁。这就要就看你的窗口的“引用”的方式。跟你是否调用 Close 方法没有关系。

不过这恰好说明了你的程序很可能有内存泄漏问题。


你说的这个问题好严重,我的所有窗体都是 this.close();
怎么办,还有,不是说C#不用考虑这个内存不释放的问题吗,不是自动回收?而且我没有使用非托管资源啊.

你窗体里是否创建了线程?用没用非托管资源,你自己说了不算,GC没回收就说明你用了非托管资源.
  相关解决方案