It probably doesn't stop the timer, it just blocks it. Your loop is fully occupying the UI thread until it completes. Your timer also appears to be a Windows.Forms.Timer, because if you don't know then that's what it is. After all, to make any of the other timers you'd have to do it deliberately. To use a Windows.Forms.Timer you'd just drag the component onto the form. You can check this by going into the .designer.vb file and looking for your timer declaration, which will be in there, but it's a Forms.Timer.

Since it is a Forms.Timer, it will be raising events on the UI thread that you would hande in your Tick event handler, but only if the UI thread has a chance to pump messages. You don't give it a chance to pump messages while your loop is running because the loop is occupying all of its time. Theoretically, you could use one of the other timers such that the tick event is not occuring on the UI thread and wouldn't be blocked. However, I see that the ONLY reason you are using the timer is to show a countdown on the UI, so if you use a different timer you will have to synchronize back to the UI thread via Invoke, anyways. Therefore, I'd be inclined to say that you should just add an Application.DoEvents line into your loop and be done with it. The re-entrancy issues that some people object to with DoEvents isn't going to matter for this situation, so DoEvents will work....as poorly as anything else.

The problem is that your loop appears to make a few calls that might, themselves take longer than a second. Therefore, adding DoEvents will cause the counter to happen, but it likely wouldn't appear smooth. More likely you'd see the number jump up a couple values, pause for a time, jump up a bit more, pause, jump again, and so on. You'd have to have the tick event being handled in a different thread to get smoother behavior, but then you'd not just have to invoke back to the UI thread, but you'd probably have to explicitly call lblCD.Refresh after setting the text, or you might not ever see a change, as the Paint event triggered by changing the text would be blocked by your Do Loop the same way that the timer.tick events are being blocked.