Si consideri il seguente codice:Timer, raccolta eventi e rifiuti: mi manca qualcosa?
class TestTimerGC : Form
{
public TestTimerGC()
{
Button btnGC = new Button();
btnGC.Text = "GC";
btnGC.Click += (sender, e) => GC.Collect();
this.Controls.Add(btnGC);
System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
tmr.Interval = 1000;
tmr.Tick += (sender, e) => this.Text = DateTime.Now.ToString();
tmr.Start();
}
}
Se non mi sbaglio, dopo la variabile tmr
va fuori del campo di applicazione, il Timer
non viene fatto riferimento da nessuna parte, quindi dovrebbe essere per la garbage collection. Ma quando clicco sul pulsante GC, il timer continua a funzionare, quindi suppongo che non sia stato raccolto ...
Qualcuno ha una spiegazione per questo?
PS: non è un vero e proprio programma, naturalmente, stavo solo cercando di dimostrare un punto a qualcuno ... ma la mia prova non ha funzionato;)
Suppongo che questo sia un timer WinForms. – SLaks
sì, ho aggiornato il codice per renderlo chiaro –