Se devi eseguire più operazioni puoi intervallarle da un'istruzione Doevents() che elabora i messaggi nella MessagePump, e questo è il metodo senza thread

ES.:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Show()
operazione1()
ProgressBar1.Value = 33
Application.DoEvents()
operazione2()
ProgressBar1.Value = 66
Application.DoEvents()
operazione3()
ProgressBar1.Value = 100
Application.DoEvents()
'operazioni finite
End Sub
Sub operazione1()
'fai calcoli
End Sub
Sub operazione2()
'fai calcoli
End Sub
Sub operazione3()
'fai calcoli
End Sub

Oppure se proprio vuoi usare i Thread dovresti caricare in blocco le operazioni da eseguire in un thread che viene eseguito all'inizio o quando vuoi tu.

ES.:

Dim t1 As New System.Threading.Thread(AddressOf CaricaDati)


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Show()
t1.Start()
'operazioni finite
End Sub


Sub CaricaDati()
'Elabora quello che hai da elaborare qui
'e fai andare avanti la progressbar
'es:
operazione1()
ProgressBar1.Value = 33
operazione2()
ProgressBar1.Value = 66
operazione3()
ProgressBar1.Value = 100
End Sub

Sub operazione1()
'fai calcoli
End Sub
Sub operazione2()
'fai calcoli
End Sub
Sub operazione3()
'fai calcoli
End Sub


Sia che tu usi uno o l'altro metodo mentre i dati si caricheranno tu potrai usare il form senza che questo si blocchi