public SystemClock() { int ticks = 0, secs = 0, mins = 0, hours = 0, days = 0; var timer = this.CreateTimer(); var interval = timer.Delay; timer.Tick += delegate { ticks += interval; Milliseconds?.Invoke(ticks); if (ticks >= 1000) { ++secs; ticks = 0; Seconds?.Invoke(secs); if (secs == 60) { ++mins; secs = 0; Minutes?.Invoke(mins); if (mins == 60) { ++hours; mins = 0; Hours?.Invoke(hours); if (hours == 24) { ++days; hours = 0; Days?.Invoke(days); } } } } }; timer.Start(); }