Rozważmy następujący kod:Czasomierz, zdarzenie i wyrzucanie śmieci: czy czegoś brakuje?
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();
}
}
Jeśli się nie mylę, po zmiennej tmr
wykracza poza zakres rozporządzenia, Timer
nie odwołuje się nigdzie, więc powinien mieć prawo do zbierania śmieci. Ale kiedy klikam przycisk GC, zegar nadal działa, więc domyślam się, że nie został on pobrany ...
Czy ktoś ma wyjaśnienie tego?
PS: to nie jest prawdziwy program, oczywiście, ja po prostu staramy się udowodnić, punkt do kogoś ... ale mój dowód nie działa;)
Zakładam, że jest to zegar WinForm. – SLaks
Tak, jest, zaktualizowałem kod, aby to wyjaśnić –