我有以下代码使用System.Timers.Timer:
// an instance variable Timer inside a method Timer aTimer = new Timer(); aTimer.Elapsed += new ElapsedEventHandler(Onelapsedtime); aTimer.Interval = 300000; aTimer.AutoReset = false; aTimer.Enabled = true; while (aTimer.Enabled) { if (count == expectedCount) { aTimer.Enabled = false; break; } }
private static void Onelapsedtime(Object source,ElapsedEventArgs e) { // do something }
问题是:如果定时器事件被触发并进入Onelapsedtime,Timer对象是否会停止并被正确地垃圾收集?如果没有,我该怎么做才能正确处理Timer对象/停止它?我不希望计时器突然蠕动并在我的应用程序中造成破坏.
解决方法
调用Timer.dispose:
http://msdn.microsoft.com/en-us/library/zb0225y6.aspx
http://msdn.microsoft.com/en-us/library/zb0225y6.aspx
private static void Onelapsedtime(Object source,ElapsedEventArgs e) { ((Timer)source).dispose(); }