Usare i thread con il Compact Framework: alcuni accorgimenti

Avendo avuto la necessità di eseguire un'operazione "bloccante" (l'operazione dura in totale circa 20 secondi, si... si tratta di quella sincronizzazione via GPRS) ho pensato bene di eseguire l'intera procedura in un thread separato in modo da non dare all'utente la sensazione che l'applicazione si sia bloccata.

Secondo le linee guida che ho trovato su MSDN, faccio partire il thread in questo modo:

Dim starter As New ThreadStart(AddressOf Sincronizzazione)
_tSync = New Thread(starter)
_tSync.Start()

Un problema che ho avuto nell'eseguire la procedura è stato questo: se dall'interno della procedura si va ad interagire con elementi della UI (nel mio caso aggiornavo una label scrivendoci lo stato delle operazioni) bisogna utilizzare una particolare istruzione ed creare una procedura separata. In particolare, se voglio aggiornare una label dall'interno della mia procedura, ne devo prima creare una:

Private Sub MsgRepInCorso(ByVal o As Object, ByVal e As EventArgs)
Me.lblStato.Text = "Stato: replica in corso..."
End Sub

Dall'interno della procedura Sincronizzazione invoco l'aggiornamento della label in questo modo:

Me.lblStato.Invoke(New EventHandler(AddressOf MsgRepInCorso))

Un'altra piccola nota: con il CF 1.0 non è possibile sospendere o interrompere l'esecuzione di un thread (sarà possibile farlo con la versione 2.0 del Compact Framework).

Print | posted on mercoledì 11 maggio 2005 18:34