Problema multithreading [VB.Net]

martedì 14 aprile 2009 - 09.47

xxtr93 Profilo | Junior Member

Ciao a tutti!

Sto cercando di utilizzare più thread perchè l'applicazione possa rispondere anche durante determinate operazioni di lunga durata, però nonostante questo si rifiuta di eseguire tutto ciò ke si trova all'interno della routine sub "Load"... per esempio non mi cambia la scritta di alcune label

Io ho fatto così:

Dim Thr1 As Thread Dim Avviathr As New Thread(AddressOf Load) Avvia.IsBackground = True Control.CheckForIllegalCrossThreadCalls = True Avvia.Start()

Ho provato pure con i delegati ma sinceramente non ci ho capito un gran chè



Anonimo Profilo | Senior Member

Su msdn vi è una esaustiva guida su come utilizzare il background worker, che è indicato per quello che ti serve fare:

http://msdn.microsoft.com/it-it/library/system.componentmodel.backgroundworker(VS.95).aspx

CIao
Riccardo

R3GM4ST3R Profilo | Junior Member

Ciao, per aggiornare un qualsiasi componente grafico dall'interno del thread devi utilizzare i delegati, se devi fare una cosa "veloce", tipo il caricamento dei dati, usa i background worker al posto del thread!
Così hai già tutto fatto.

Altrimenti devi fare una cosa del tipo :

Form1 class
'//Delegato, praticamente un metodo che fa da tramite tra il thread e la GUI
Public Delegate Sub Process_Finish(ByVal strMessage As String)

'//Metodo che gestisce il cambio dei dati del controllo
Private Sub Thread_Process_Finish(ByVal str As String)
me.label1.text = str
End Sub
End Form1 class

ThreadClass
public s_strMessage as string = "CIAO"

sub DoWork()
Invoke(New Process_Finish(AddressOf Thread_Process_Finish), New Object() {s_strMessage})
end sub

End ThreadClass

L'ho scritto così alla veloce non so se compila al volo, cmq i concetti son quelli.
Dal thread invoki il delegato passando l'indirizzo della funzione che ti aggiorna la label a video.

Ciaux!


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

xxtr93 Profilo | Junior Member

Grazie ho risolto alla grande!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5