private void Run() { Stopwatch stopwatch = new Stopwatch(); var clockTickMs = 0; while (!requestedStop) { stopwatch.Reset(); stopwatch.Start(); disassembler.Cycle(); synchronizationContext.Send(new SendOrPostCallback(_ => { UpdateGuiInfo(); }), new object()); var difTime = clockTickMs - (int)stopwatch.ElapsedMilliseconds; if (difTime > 0) { Thread.Sleep(difTime); } Debug.WriteLine($"Cpu+GUI took {stopwatch.ElapsedMilliseconds}ms"); } }