考虑 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() 一次后,从那时起每 5 秒调用一次 func2(),即使我失去了对计时器的引用,因为它的范围仅限于 func1()。这意味着在调用 func1() 很久之后,计时器显然仍在内存中,正在做它的事情。我的问题是,如果我将其添加到 func2():
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
((DispatcherTimer)a).Stop()
}
计时器会很快被垃圾收集器拾取,还是会继续留在内存中直到程序退出?如果它留在内存中,我如何手动将其标记为收集(或做类似的事情)?
我的第二个问题(如果您愿意回答的话)是常规计时器在这种情况下是否会具有完全相同的行为,或者我应该知道是否存在显着差异。
谢谢!