using System.Diagnostics;
using HighPrecisionTimer;
using Math = System.Math;
public class NovaObservable
private Stopwatch sw { get; set; }
private int Interval { get; set; }
private int Duration { get; set; }
private MultimediaTimer Timer { get; set; }
private Action Action { get; set; }
private int Iteration { get; set; } = 1;
private readonly object _lockObject = new object();
public NovaObservable(int interval, int duration, Action action)
Console.WriteLine($"Start Time: {DateTime.Now}");
using (Timer = new MultimediaTimer { Interval = interval, Resolution = 0 })
Timer.Elapsed += OnTimerElapsed;
private void OnTimerElapsed(object obj, EventArgs args)
var num = Math.Round((double)sw.ElapsedMilliseconds / Interval);
var roundedElapsed = num * Interval;
Console.WriteLine(roundedElapsed);
if (roundedElapsed <= Duration)
Console.Write($"[{Iteration}]");
Timer.Elapsed -= OnTimerElapsed;
Console.WriteLine($"End Time: {DateTime.Now}");