You are assuming two things that are not necessarily true.

The first assumption is that a Timer with an interval of 1 will fire 1000 times a second, and it usually wont. Timers are a very low priority thing, so the interval only counts as the minimum... while you will usually be relatively close to it, sometimes it can be dramatically longer (even a few seconds longer, depending on what the computer is doing at the time).

The other assumption is that the Timer will fire at the frequency related to the interval, but it usually wont: because it will run the code inside the event, then start the next interval (so if your code takes 50ms, the second time it runs will be 50+1ms after the first).


If you need to know the time since the start, then you should be calculating/storing that independently of the timer ticks. An easy way to do that (which has problems if you run the code during midnight) is to read the value of the Timer function, which specifies the number of milliseconds since midnight, eg:
Code:
Private TimerStart as Single
...
Tmr1.Enabled = True
TimerStart = Timer
...
Private Sub Tmr1_Timer()
Select Case (Timer - TimerStart)