What you call
StopWatch
is not a "real"
StopWatch
, not
System.Diagnostics.Stopwatch
. I don't know what is it. See my comments to the question.
For best accuracy use System.Diagnostics.Stopwatch
.
I'm afraid you use
System.Windows.Timer
. If you need any reasonable accuracy, don't use this type (basically, you never need it at all); this timer is notoriously inaccurate! What you observe is maybe the effect of its low priority.
Moreover, you almost never need to use timers! In most cases, a thread is easier to implement; and the result will be much more robust; for details, please see my past answer:
Timer Threading in C#[
^].
—SA