Aggiornare controlli da thread secondari con Invoke

Scritto da  Massimo Bonanni il lunedì 27 giugno 2011  •  Linguaggio: VB   • Livello: 100


Le applicazioni windows forms sono STA (Single Thread Apartment) il che significa che un controllo dell'interfaccia grafica può essere modificato solo dal thread che lo possiede (tipicamente il thread principale dell'applicazione).
Per poter effettuare una modifica da un thread secondario possiamo utilizzare il metodo Invoke e la proprietà InvokeRequired della classe Control.
Supponiamo di voler modificare il controllo denominato MyControl:

VB.NET

Private Delegate Sub UpdateMyControlDelegate()
Public Sub UpdateMyControl()
   If MyControl.InvokeRequired Then ' verifico se mi trovo in un thread non proprietario del controllo
       MyControl.Invoke(New UpdateMyControlDelegate(AddressOf UpdateMyControl)) ' Rieseguo il metodo UpdateMyControl come se mi trovassi mel thread proprietario
   Else
       '
       ' Codice che si occupa di modificare effettivamente il controllo
       '
    End If
End Sub

 

 


Tags: window forms

 
x