Рассмотрим эту пару функций в 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 секунд с тех пор, несмотря на то, я потерял ссылку на мой таймер, так как сфера его применения ограничена to func1(). Это означает, что таймер, очевидно, все еще находится в памяти, делая свою вещь, задолго до вызова func1(). Мой вопрос, если я добавлю это func2():
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
((DispatcherTimer)a).Stop()
}
будет таймер будет подобран сбором мусора вскоре после того, или он будет продолжать оставаться в памяти до выхода из программы? Если он остается в памяти, как я могу пометить его для коллекции вручную (или сделать что-то подобное)?
Вторичный вопрос, который у меня есть (если вы чувствуете склонность отвечать), заключается в том, что обычный таймер будет иметь такое же поведение в этой ситуации или если есть существенная разница, о которой я должен знать.
Спасибо!