Рассмотрим эту пару функций в 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()
}
будет ли таймер включаться сборщиком мусора вскоре после этого, или он будет оставаться в памяти до выхода из программы? Если он остается в памяти, как я могу пометить его для сбора вручную (или сделать что-то подобное)?
Вторичный вопрос, который у меня возникает (если вы склонны отвечать), заключается в том, будет ли обычный таймер вести себя точно так же в этой ситуации или если есть существенная разница, о которой я должен знать.
Спасибо!