Out of all the Timers that come in the .NET Framework, the System.Windows.Forms.Timer class is about the worst when it comes to raising it's event on time. System.Timers.Timer is better, but can still be late. The System.Threading.Timer is the most accurate, but is also the hardest to use. In any case, counting ticks of a timer is about the worst way you can implement this. You should be using a rather fast firing timer (accurate or not) and comparing the current time to the scheduled time of a process you need to launch, even if it's every one second. If you're code is doing other things and the UI thread is blocked for longer than your Timer's Interval is set for, using anything but the Threading.Timer will result in your tick count not being accurate because the events cannot be processed until the UI thread is unblocked. Another possible issue is something else running on the machine could be screwing with the O/S-based timers that the .NET Timer classes rely on. Be it bad hardware or an O/S problem.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak Microsoft MVP Visual Developer - Visual Basic
2006, 2007