Quante volte vi è capitato di avere la necessità di aggiornare un controllo che si trova su una form istanziata in un thread principale, da un altro thread che sta seguendo un operazione asincrona? Ecco come evitare errori di cross thread e non duplicare il codice se si effettua la chiamata dal thread principale: private delegate void InvokeMiaFunzione();private InvokeMiaFunzione mInvokeMiaFunzione; private void MiaFunzione(){ if (this.InvokeRequired) { this.Invoke(mInvokeMiaFunzione); } else { // Qui si può modificare lo stato del controllo della form senza incorrere in nessun problema } } private void CostruttoreDellaClasse(){ mInvokeMiaFunzione= new InvokeMiaFunzione (MiaFunzione);} private void ProcessoAsincrono(){ MiaFunzione();} private void ProcessoSincrono(){ MiaFunzione();}
Modificare lo stato di un controllo da un operazione asincrona
Quante volte vi è capitato di avere la necessità di aggiornare un controllo che si trova su una form istanziata in un thread principale, da un altro thread che sta seguendo un operazione asincrona? Ecco come evitare errori di cross thread e non duplicare il codice se si effettua la chiamata dal thread principale: private delegate void InvokeMiaFunzione();private InvokeMiaFunzione mInvokeMiaFunzione; private void MiaFunzione(){ if (this.InvokeRequired) { this.Invoke(mInvokeMiaFunzione); } else { // Qui si può modificare lo stato del controllo della form senza incorrere in nessun problema } } private void CostruttoreDellaClasse(){ mInvokeMiaFunzione= new InvokeMiaFunzione (MiaFunzione);} private void ProcessoAsincrono(){ MiaFunzione();} private void ProcessoSincrono(){ MiaFunzione();}