Post nato da una discussione su forum. Se utilizziamo un componente Backgroundworker per l'esecuzione di codice in
background, bisogna stare attenti alle operazioni "cross-thread", ad esempio quando il codice interagisce con i controlli
di una Windows Form. Se abbiamo ad esempio un controllo ListView, per popolarlo senza provocare eccezioni durante
l'esecuzione dell'applicazione, possiamo costruire ed utilizzare un delegate come nel codice seguente:
Private Delegate Sub ScriviSuListViewDelegate()
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
If (Not (ListView1.InvokeRequired)) Then
For i As Integer = 0 To 20
ListView1.Items.Add(String.Format("Item #{0}", i))
Next
Else
Dim d As New ScriviSuListViewDelegate(AddressOf ScriviSuListiView)
ListView1.Invoke(d)
End If
End Sub
Technorati Tag:
BackgroundWorker