in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net

Paolo Possanzini

Operazioni Cross-Thread con WPF

In una applicazione Windows Forms classica, per evitare il lock dell'applicazione, è buona regola invocare alcune operazioni su Thread paralleli e poi aggiornare l'interfaccia utente durante l'esecuzione del thread con operazioni cross-thread.
In WPF questa necessità si sente di meno poichè alcune operazioni cross-thread su controlli vengono gestite direttamente dal framework.

Tuttavia può capitare di dover fare una operazione cross-thread con controlli WPF, per aggiornare un controllo esplicitamente oppure per invocare un metodo di un controllo che è un in thread diverso.
Mi sono trovato in questa situazione proprio oggi, e non ho trovato il metodo Invoke nella Windows che dovevo aggiornare.

La mancanza di Invoke si spiega facilmente; WPF infatti non eredita da nessuno dei normali controlli di Windows Forms e quindi manca il metodo Invoke che nella gerarchia degli oggetti è dichiarato dentro System.Windows.Forms.Control
Tuttavia il controllo o la finestra che stiamo visualizzando si trova in un'altro thread e quindi dovremmo poter effettuare l'invoke.

La risposta arriva molto presto, in ogni controllo troviamo la proprietà Dispatcher che ci mette a disposizione l'oggetto Dispatcher del thread con cui ogni oggetto è associato.
Dal Dispatcher possiamo chiamare il metodo Invoke.

Only published comments... Nov 27 2007, 04:11 PM by Paolo Possanzini
Filed under: , ,

About Paolo Possanzini

Programmatore di vecchia data, mi sono appassionato a dotnet fin dalla prima versione. Mi interesso di programmazione, accesso ai dati, Sql Server.
Con Andrea abbiamo fondato TeamDev snc.

Scarica il mio Biglietto da visita
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems