On .Net Framework 2.0, 3.5 and 4.0 on Windows 7, I am able to create an STA thread and run a tight Do While Not ...Loop with a Sleep of 1ms. I have a Stopwatch that counts the iterations. CPU utilization is next to nothing and my stopwatch that debug prints an iteration count each 1 second prints something very close to 1000, which would be the 1000Hz expected when sleeping every 1ms.
This same thread/loop/stopwatch code in .Net Framework 4.5 on Windows 8 gives an output of 500Hz. It's as if 1ms = 2ms on the new framework in Windows 8.
My entire app is based on this loop. Please advise. An answer of "timing critical things aren't supported on Windows" is really the last thing I'm hoping to hear. It's been working well since Windows XP.