The code you posted uses one thread. That means every operation is excuted in sequence right after the previous one finished.
Since you can update GUI elements right away, I suppose the code to be run from main thread (a.k.a "GUI thread"). Blocking the GUI thread results in the GUI ("Graphical User Interface") not updating until there is some idle time for it.
The blocking calls I see are
myClient.Client.Receive()
and
System.Threading.Thread.Sleep()
.
Don't Sleep() the GUI thread.
Don't use potentially long blocking calls ("Receive()") in the GUI thread.
Let those operations run in a
BackgroundWorker[
^].
Use its
ReportProgress()
method and
ProgressChanged
event to update the GUI.