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






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 sub della 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
while true
windows.forms.messagebox("CIAO")
end while

End Sub

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

Cosa c'è che non va nel codice che contiene anche il timer? :master: