Nel seguente codice, creo un DispatcherTimer nel costruttore della classe. Nessuno continua a farvi riferimento.Garbage collection dell'oggetto C# dichiarato nel costruttore
A mio parere, il timer deve essere recuperato dal garbage collector qualche tempo dopo aver abbandonato l'ambito del costruttore. Ma questo non succede! Anche dopo aver forzato una garbage collection con GC.Collect()
Cosa sta succedendo sotto il cofano?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(100),
IsEnabled = true
}
.Tick += (s, e) =>
{
textBlock1.Text = DateTime.Now.ToString();
};
}
}
Questo è in realtà sbagliato ... è un diverso tipo di timer. – dlev
I DispatcherTimer sono soggetti alle stesse regole di garbage collection di Threading.Timers? In tal caso, non avere un riferimento di campo (solo un riferimento locale) al timer causerebbe la garbage collection in sé e per sé ... ma non penso che sia il caso di DispatcherTimers ... – Jeff
@ JeffN825 Tutti gli oggetti sono soggetti a le stesse regole del GC: se sei irraggiungibile da una radice GC, allora sei idoneo per GC. In questo caso, quel codice non è nemmeno * da * la corretta classe del timer. – dlev