Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VB.NET - Problema multithread

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

VB.NET - Problema multithread

Postdi Ivan_J_147 » 23/09/11 14:29

Ciao a tutti! So che sul mio problema esistono pagine e pagine nei vari forum, ma anche se credo di aver seguito le istruzioni alla lettera ho ancora qualche problema.
Sto realizzando un programma che gestisca la connessione ad un dispositivo mediante bluetooth. Quando spengo tale dispositivo il software lo riconosce, e cerca di rilasciare la porta COM associata. L'operazione però può durare parecchio, fino a 20 secondi, e quindi volevo inserire un form con una progressbar che avanza (casualmente), solo per far capire all'utente che il programma non si è bloccato.
In un modulo ho scritto:
Codice: Seleziona tutto
formMessaggi.mtd_avviaProgressBar(2)
formMessaggi.Refresh()
Com.mtd_disconnettiTma()

Dove formMessaggi è appunto il form che apro, contenente la progress bar.
Com.mtd_disconnettiTma() è invece la procedura che scollega la com, e che causa il "blocco" del programma.
Questo è quello che succede nella procedura avviaProgressBar:
Codice: Seleziona tutto
Public Sub mtd_avviaProgressBar(tempo As Integer)
        tempoPb = tempo
        t.Start()
        t.Priority = Threading.ThreadPriority.Highest
    End Sub

mentre queste variabili sono dichiarate appunto nella formMessaggi:
Codice: Seleziona tutto
Public Delegate Sub delegateSetPb(ByVal val As Integer)
Dim istanzaDelSetPb As New delegateSetPb(AddressOf setProgressBarValue)
Dim t As New System.Threading.Thread(AddressOf incrementaPB)

Quindi infine questo è il codice relativo all'incremento della progressbar.
Codice: Seleziona tutto
Public Sub incrementaPB()
   Dim val As Integer = 0
   Do While Pb.Value < 100
         val = val + 1
         Me.Invoke(istanzaDelSetPb, val)
         Threading.Thread.Sleep(tempoPb * 10)
    Loop
End Sub

    Public Sub setProgressBarValue(ByVal val As Integer)
        Pb.Value = val
    End Sub


dove Pb è la progressBar stessa.
Io mi aspetto cosa, che il software si disconnetta tranquillamente dalla com con la procedura Com.mtd_disconnettiTma(), e che nel frattempo continui ad entrare nel ciclo dell'incrementa Pb.
Invece no!! Ho provato ad eseguire passo passo un istruzione per volta in debug, e succede che mi entra una volta nel ciclo, raggiunge l'istruzione
Codice: Seleziona tutto
Me.Invoke(istanzaDelSetPb, val)

dopodichè,se provo ad avanzare uno step, il cursore di debug sparisce, e riappare solo dopo che è terminata la disconnessione dal sensore.
Non so se mi sono spiegato... è come se l'istruzione
Codice: Seleziona tutto
Me.Invoke(istanzaDelSetPb, val)

sospendesse il thread, e aspettasse la fine della disconnessione per continuare.
Il che però ha gran poco senso, considerando che io ho creato 2 thread proprio per poter far procedere le 2 cose in parallelo.
Qualcuno sa come aiutarmi? :(
Ivan_J_147
Utente Junior
 
Post: 86
Iscritto il: 04/09/06 15:32

Sponsor
 

Torna a Programmazione


Topic correlati a "VB.NET - Problema multithread":

Problema Windows 10
Autore: asso1998
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti