如题
C#
在一个窗体里面放了一个timer1定时器,有一个方法1妙执行一次,产生一个日志
窗体关闭后,发现这个定时器还在执行,这是怎么回事呢.难道定时器不是窗体的一个控件,不随窗体关闭时一起消失?
------解决思路----------------------
定时器是一个组件,其工作时有自己的内部线程,Timer本身有Close、Dispose方法释放其占用的资源。
窗体关闭前要把Timer的Enabled设置为false。
------解决思路----------------------
Enabled中文的意思是:启用
------解决思路----------------------
Enabled设置为true就执行start,设置为false就执行stop,这个属性内部应该有封装相关动作
------解决思路----------------------
窗口里的定时器是不是自动销毁,要看你的窗口会不会被 GC 销毁。这就要就看你的窗口的“引用”的方式。跟你是否调用 Close 方法没有关系。
不过这恰好说明了你的程序很可能有内存泄漏问题。
------解决思路----------------------
定时器是一个组件,其工作时有自己的内部线程,Timer本身有Close、Dispose方法释放其占用的资源。
窗体关闭前要把Timer的Enabled设置为false。
我在关窗事件里写了
this.timer1.Stop()
然后关闭窗体后发现不产生日志了.怎么还有enabled这个是做什么用的
------解决思路----------------------
要自己释放掉的。
------解决思路----------------------
Enabled设置为true就执行start,设置为false就执行stop,这个属性内部应该有封装相关动作
很纠结,既然有start()和stop()那又怎么会有enabled这个属性
那2个函数只是在给enabled赋值true和false而已
没有这个属性,你怎么查看当前timer到底可用还是不可用?
只见过只读属性,只写属性有意义?
------解决思路----------------------
窗口里的定时器是不是自动销毁,要看你的窗口会不会被 GC 销毁。这就要就看你的窗口的“引用”的方式。跟你是否调用 Close 方法没有关系。
不过这恰好说明了你的程序很可能有内存泄漏问题。
你说的这个问题好严重,我的所有窗体都是 this.close();
怎么办,还有,不是说C#不用考虑这个内存不释放的问题吗,不是自动回收?而且我没有使用非托管资源啊.
你窗体里是否创建了线程?用没用非托管资源,你自己说了不算,GC没回收就说明你用了非托管资源.