Aggiornare controlli da thread secondari con Invoke
Scritto da
Massimo Bonanni il
lunedì 27 giugno 2011
•
Linguaggio:
• 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