Chi sviluppa applicazioni windows forms sa che prima o poi per evitare il freezing della UI bisogna ricorrre ai threads, quello che molti non sanno (putroppo) e che quando si usano Threads bisogna porre molta attenzione al come si utilizzano i controlli windows forms perchè questi non sono thread-safe e non a caso nel framework 2.0 verrà generata un eccezione.
Juwal Lowy mostra come utilizzare i delegates per invocare metodi in maniera asincrona e dall'esempio appare come la tecnica richieda un sacco di codice per un operazione banale come aggiornare una progressbar da un thread separato.
Per evitare questo dalla versione 2.0 avremo un controllo
BackGroundWorker per semplificare questo tipo di operazioni.
Lo speaker mostra il codice di un controllo equivalente a BackGroundWorker scritto con il framework 1.1 e disponibile per il download (insieme alle slides della sessione)
Si passa poi all'analisi dei vari Timers presenti nel framework partendo da quello in System.Windows.Form (disponibile anche come controllo e basato su WM_TIMER) che è Thread Safe ma impreciso e bloccato se la message pump del vostro applicativo è bloccata.
Il timer in System.Timer.Timer usa un thread dal threadpool (anche questo disponibile come controllo) quindi l'evento Tick viene generato in un thread separato ma usando la proprietè SyncronizingObject (di tipo ISyncronizeInvoke) è comunque possibile usarlo in maniera Thread-Safe.