Progress bar che non funziona dentro BGWorker

lunedì 05 ottobre 2009 - 16.26

Blacky Profilo | Newbie

ola todos, ho questo fastidioso problema.
Ho una windows form con 2 bottoni
button1=CICLO START
button2=CICLO STOP

Il bottone 1 fà partire il background Work

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
bw.WorkerSupportsCancellation = True
bw.RunWorkerAsync()
End Sub

Qui Richiamo la funzione ciclom

Private Sub bw_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bw.DoWork
ciclom()
End Sub

Ciclom:


Public Sub ciclom()
Dim i As Long
Dim x As Double
Dim max As Long = 200000
For i = 0 To max
x = (100 / max) * i
bw.ReportProgress(x)
Next

End Sub

'La barra PROGRESS BAR che funziona in maniera corretta

Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bw.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub

La Label che mi infica la fine lavoro.
Private Sub bw_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
Label1.Text = "FINITO"
End Sub

Il secondo bottone che dovrebbe stoppare il ciclo.

Private Sub cancelAsyncButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cancelAsyncButton.Click
bw.CancelAsync()
cancelAsyncButton.Enabled = False
End Sub

=============================================================

Il problema è che, una volta startato il BackGround Work non riesco a fare nulla, mi impegna tutta la FORM e non la posso ne muovore, ne cliccare il bottone di stop..
Il che è strano perchè quello che dovrebbe fare è proprio quello di far girare il thread in background rispetto al thread al quale è allacciato il winform.
Mi potete aiutare a capire e cosi, a correggere il mio codice?
Grazie
Francy

Jeremy Profilo | Guru

Ciao Francesca.
A parte il fatto che credo tu volessi scrivere una cosa del genere:
x = (max/ 100) * i
anzichè
x = (100 / max) * i

tieni comunque presente il fatto che la progrssbar è residente sul form, il quale è gestito dal thread principale, pertanto è abbastanza normale quello che riscontri.
Per capire meglio il problema, comincia con aggiungere l'istruzione Application.DoEvents prima dell'istruzione Next del ciclo For.
Facci sapere...
Ciao
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