考虑 C# 中的这对函数:
void func1() {
DispatcherTimer tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(5);
tmr.Tick += func2;
tmr.Start();
}
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
}
调用 func1() 一次后,从那时起,func2() 每 5 秒调用一次,即使我失去了对计时器的引用,因为它的范围仅限于 func1()。这意味着在调用 func1() 很久之后,计时器显然仍在内存中,执行其操作。我的问题是,如果我将其添加到 func2() 中:
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
((DispatcherTimer)a).Stop()
}
计时器会很快被垃圾收集回收,还是会继续保留在内存中直到程序退出?如果它保留在内存中,我如何将其标记为手动收集(或执行类似的操作)?
我的第二个问题(如果您愿意回答的话)是,常规计时器在这种情况下是否会具有完全相同的行为,或者是否存在我应该了解的显着差异。
Thanks!
Threading.Dispatcher 类保留所有活动 DispatcherTimers 的列表。当您在 Tick 事件处理程序中调用 Stop() 时,计时器将从该列表中删除。现在不再有任何对计时器的引用。它最终将被垃圾收集。这没关系,因为无法再次启动计时器。毕竟,您没有任何方法可以再获取引用,Tick 事件处理程序是您最后的尝试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)