The problem is that you're NOT executing that code in a separate thread. You start a new thread and call DoProcessing, then the very first thing that DoProcessing does is invoke a call back to the UI thread and ALL the work is done there.
You are supposed to do all your work on the worker thread and then invoke a call back to the UI thread ONLY to access the UI. Get rid of any that If block and any interaction with the UI from that method. Then that whole method will be executed on the worker thread. You then write a new method ONLY for interaction with the UI, e.g.
vb.net Code:
Private Sub UpdateLabel(ByVal text As String)
If Me.lblstatus.InvokeRequired Then
Me.lblstatus.Invoke(New MethodInvoker(AddressOf DoProcessing), text)
Else
Me.lblstatus.Text = text
End If
End Sub
You can then call that method from DoProcessing to update lblstatus.