To see your label update every 2 seconds you need to process events try something like this:
Dim j As Integer
For j = 0 To readText.Length
The user interface is updated via events/messages. These events/messages are queued and the processed by the main user interface thread. When you update a label it is usually on the main user interface thread, otherwise you have to update it indirectly with Invoke().
Thread.Sleep(2000) puts the current thread (in this case the main user interface thread) to sleep for 2000 milliseconds. during this time no messages/events can be processed Application.DoEvents() forces all pending messages/events to be processed.
Any thing you do on an event will holdup the message/event processing until you finish unless you start off a new thread or force processing with DoEvents