I wrote the below function to sleep, while processing the window events. It works well enough, but I'd like to improve the accuracy of the sleep. Example - If you call it with 10 msec (0.010), it can take up to 15 msec of real time before it exits. Any suggestions on making it closer to 10 msec?

Code:
    Public Sub Spin(ByVal TimeInSec As Double)
        Dim tsStart As TimeSpan = Date.Now.TimeOfDay
        Dim tsNext As TimeSpan = tsStart
        Dim TimeSlept As Double = tsNext.TotalSeconds - tsStart.TotalSeconds

        'wait for Time seconds
        While TimeSlept < TimeInSec AndAlso TimeSlept >= 0 AndAlso AbortTest() = False
            System.Windows.Forms.Application.DoEvents()
            Sleep(2)
            tsNext = Date.Now.TimeOfDay
            TimeSlept = tsNext.TotalSeconds - tsStart.TotalSeconds
        End While

    End Sub