OK, Few problems that i see with the concept of threading in your code is, your thread isn't actually availing benefits of threading concept.
What it means ?
Your thread is just calling caller i.e main thread in which form is loaded, and caller is actually calling while loops and Thread.Sleep(200).
Thats the reason why you are facing the problem. Its just as good as running without any thread.
I think someone has shared good article here on Threading with Traffic signal example. see that it will help you.
Solution
Actually this aint a perfect solution, just a quick change that might work...
_value is global shared integer = 0
Private Sub p1()
While _value < 100
Thread.Sleep(200)
p2()
End While
t1.Abort()
End Sub
Private Sub p2()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf p2))
Else
_value = ProgressBar1.Value+1
if _value < 100
ProgressBar1.Value = _value
Label1.Text = Str(ProgressBar1.Value) & "%"
Label1.Update()
End If
End If
End Sub