10 milliseconds is pretty good, in Windows terms - it isn't a real-time operating system, and there is no guarantee that even on the same thread one instruction will be executed immediately before the next: it depends on the system load and can be any time interval at all. Windows is a pre-emptive multitasking system, and a thread can be suspended at any time to let an equal-or-higher priority thread have a chance. And to be frank, there really isn't much - if anything - you can do about it.
If you must, absolutely must, have accurate timing in windows then you are looking at a world of pain even trying it in .NET, but you might - and I haven't tried this - using multimedia timers via P/Invoke instead of standard ones:
http://msdn.microsoft.com/en-us/library/dd743609(v=VS.85).aspx[
^].
But ... I think you are going to have to move to a lower level of software if you want near-simultaneous frame grabs.