Nella versione 2.0 del framework, un thread concorrente che tenti di usare un controllo visuale nella form, causerà sistematicamente un eccezione InvalidOperationException. Questo avviene però solo nella versione debug per evitare di rompere la compatibilità con eventuali applicazioni che usano questo modo (incorretto) di gestire i controlli.
Nella versione 1.1 e nella 2.0 in release mode l'eccezione può avvenire ma non è deterministica per tutta una serie di motivi che Juval Lowy spiega brevemente in questa sessione sulla concorrenza.
Si arriva quindi al nocciolo del discorso con ISynchronizeInvoke. Tutti i controlli derivati da Control la implementano ma il suo uso è alquanto elaborato e controproducente per la manutenzione del codice.
Ecco quindi che viene presentato il BackgroundWorker component, novità del framework 2.0 che semplifica incredibilmente tutto il lavoro di delegate e chiamate asincrone necessarie nella 1.1.
La 2.0 e però ancora lontana ed ecco che viene mostrata una implementazione di BackgroundWorker sviluppata da Juval per il framework 1.1. I sorgenti sono già disponibili insieme alle slides del TechEd.
Si passa quindi all'elaborazione sotto timer. Dopo una descrizione dei tre timer disponibili nel framework, viene in particolare sottolineato il fatto che il timer System.Threading.Timer può usare la un oggetto che implementi ISynchronizeInvoke per segnalare l'evento nel thread desiderato (per esempio quello dove vive l'interfaccia utente).