1 ms is a very short time for windows to take care of it. This is the minimum resolution a standard timer can achieve, so it's difficult that the OS can honour it regularly. You may want to test with asyncronous timer, which are based on multimedia timers and executed in a separate thread from the rest of the application and so have a higher level of priority in the system, nevertheless even in this case you may not be able to respect this pace due to hardware limits.
The optimum would be to use a counter in a daq device to fire your event every 1 ms, but this implies the the presence of an acquisition board in your system.