Nuovo Thread con timer

lunedì 01 settembre 2008 - 15.12

controvento Profilo | Newbie

Salve a tutti, vi espongo il mio problema, sto lavorando su una form che si collega ad un DB T-Sql per una select. La select richiede circa 30", e volevo mostrare una progressbar, che riempiendosi e svuotandosi, indicasse che l'elaborazione era in corso.

Ora, durante la query a T-Sql la form ovviamente si blocca in attesa della risposta della select.

Avevo pensato nello stesso progetto di creare una nuova form con un timer, qualcosa del genere


370x276 7Kb



e creare un nuovo thread che eseguisse solo questa form, così che, mentre la form principale interroga il DB, appare questa form eseguita dall'altro thread.

Ora, riesco a far partire il nuovo thread ed a farlo eseguire in contemporanea, la form si avvia, il timer parte...ma il timer, non esegue il codice al suo interno.

La form è molto semplice:

Public Class waiting

'QUESTA E' LA FORM CON LA PROGRESSBAR
Public Sub waiting_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ProgressBar1.Maximum = 100
ProgressBar1.Minimum = 0
ProgressBar1.Value = 1
Timer1.Start()

End Sub

'QUESTO E'CIO' CHE DOVREBBE FARE IL TIMER
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If ProgressBar1.Value = 100 Then
ProgressBar1.Value = 100
End If
ProgressBar1.Value += 1

End Sub
End Class

E' proprio il timer che mi da problemi, perchè modifico così la form:

Public Sub waiting_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ProgressBar1.Maximum = 100
ProgressBar1.Minimum = 0
ProgressBar1.Value = 1
windows.forms.messagebox("CIAO")
End Sub

Mi compare il messaggio "CIAO" in continuazione, fino al termine del Thread.

Cosa c'è che non va nel codice?

schifidus Profilo | Junior Member

Posta come crei il thread e lo lanci.
Marco Farina
MCTS .NET Framework 2.0 Web Applications
MCPD Web Applications

controvento Profilo | Newbie


Subito prima della query lancio il Thread:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Che non fa altro che aprire la form:

Sub avviascrollbar() waiting.Show() waiting.Activate() waiting.TopLevel = True while TRUE end while Windows.Forms.MessageBox.Show("SONO FUORI DAL THREAD") End Sub


C'è da chiarire quel WHILE TRUE, che è una mia pensata, certamente migliorabile per tenere vivo il thread, che altrimenti dopo aver invocato la form WAITING, sarebbe terminando, chiudendo la scrollbar.

us01739 Profilo | Expert

... io sinceramente avrei utilizzato un semplice BackGroundWorker....
Bye Bye

---------------------------------------------------
Roberto Gelmini - MCAD - MCDBA - MCP
http://www.robertogelmini.com
---------------------------------------------------

controvento Profilo | Newbie

Ho provato anche così, ma in realtà, anche facendo un BackgroundWorker, non fai altro che creare un nuovo thread, ovvero quello che sto facendo io.
Anche col backwork, si apre la form con la barra, la form principale fa la sua select, si avvia il nuovo THREAD e avvia la progressbar, la progressbar si carica, se deve fare qualcosa, la fa(se inserisco cicli while, messagebox, li visualizza)...solo che da quel punto in poi, non fa più nulla, il timer che invoco non esegue il codice, e la scrollbar si ferma...


eppure il codice è semplice:

Public Class waiting

Public Sub waiting_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.ProgressBar1.Maximum = 100
Me.ProgressBar1.Minimum = 1
Me.ProgressBar1.Value = 50

Me.Timer1.Start()

End Sub


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick


If Me.ProgressBar1.Value = 100 Then
Me.ProgressBar1.Value = 1
End If
Me.ProgressBar1.Value = ProgressBar1.Value + 1

End Sub
End Class
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5