Ciao ragazzi,
permettetemi di inserirmi nella discussione che si stà facendo interessante e permette un bell' approfondimento!
In Windows Form questo sarebbe un errore:
void MyFunc()
{
Timer timer = new System.Timers.Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timedEvent);
timer.Interval = 2000;
timer.Enabled = true;
}
All' uscita di MyFunc il timer potrebbe essere deallocato dal Garbage Collector, per evitarlo bisognerebbe usare:
GC.KeepAlive(timer);
In WPF invece la cosa è diversa e questo codice è corretto:
void MyFunc()
{
DispatcherTimer dt = new DispatcherTimer();
dt.Tick += new EventHandler(TickFunction);
dt.Interval = new TimeSpan(0, 0, 1);
dt.Start();
}
All' uscita della funzione il timer non viene deallocato. Questo perché la classe Threading.Dispatcher tiene una lista dei timer attivi, questi elementi vengono eliminati allo stop del timer. L' esistenza di questa lista impedisce al Garbage Colletor di distruggere i timer.