C# - Timer Precision Issue
Timer precision issue doesn't only affect Java, it should affect most programming language. It is because when you pause a thread, it gives away its right and allow the OS to schedule their job.
Thus, Thead.Sleep/Monitor.Wait does not guarantee the sleep time.
To archive high resolution, you can try using multimedia timer such as QueryPerformanceCounter
requests a minimum resolution for periodic timers.