Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Progress bar che non funziona dentro BGWorker
lunedì 05 ottobre 2009 - 16.26
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Blacky
Profilo
| Newbie
34
messaggi | Data Invio:
lun 5 ott 2009 - 16:26
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
1.527
messaggi | Data Invio:
sab 10 ott 2009 - 14:20
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
Torna su
Stanze Forum
Elenco Threads
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 !