Странное поведение таймера C#

Здравствуйте.
Кто знает почему таймеры работают как то хреновенько.

создал стопвоч и таймер с интервалом в 100мс.

System.Diagnostics.Stopwatch stw = new System.Diagnostics.Stopwatch();
            stw.Restart();

timer = new Timer(new TimerCallback((s) =>
            { 
                mscnt += 100; // считаю интервалы по 100 мс
                var bef = stw.Elapsed;
                Dispatcher.Invoke(new Action(() =>
                {
                    Canvas.Info = "mscnt = " + (mscnt/1000.0).ToString("f1")+ ",  " + stw.Elapsed.Seconds.ToString() + " sec.";
                    Canvas.Markerpos = new Point(Canvas.ActualWidth / 2 + sin, Canvas.ActualHeight / 2);
                    Canvas.InvalidateVisual();
                    //Canvas.UpdateLayout();
                })); 
            }), null, 0, 100);

Далее это все работает и очевидно что стопвоч куда то торопится и время убегает значительно.

image

Как они считают время то?? каким образом можно сделать более стабильный таймер и кому теперь верить то??