我制作了一个winform应用程序,其中我使用了system.timers.timer控件,时间间隔为 10分钟,我声明了一个整数变量,当一个特定事件被触发时,该变量会增加 问题是整数值被重置为0,但是当我将定时器控制设置为1分钟时,它会显示正确的结果 ,有谁知道为什么这种奇怪的行为?
我做了一些研究,发现其中一个原因可能就是这样 垃圾收集器可能对此负责,但是int值存储在堆上,对吧?在app域关闭之前无法进行GC 如果你知道任何其他解决方案,那么请建议,真的需要这个吗?我认为问题是变量被GC重置,但我也使用了GC.KeepAlive(TimerName);有人请吗?
答案 0 :(得分:0)
System.Timers.Timer
是多线程环境的计时器
见MSDN:
在ThreadPool主题上引发了
Elapsed
事件。
尝试使用System.Windows.Forms.Timer
代替
但是,如果您对多线程行为感兴趣,请将计时器的SynchronizingObject
属性设置为引用某个对象,该对象在与整数变量相同的线程中声明。