private static void AnimateLCD(LCD <bool> lcd, string[] cmds, TimeSpan totalTime) { int cLeft = Console.CursorLeft; int cTop = Console.CursorTop; var start = DateTime.UtcNow; var end = start.Add(totalTime); int step = (int)((end - start).TotalMilliseconds / cmds.Length); for (int i = 0; i < cmds.Length - 1; i++) { lcd.RunCommand(cmds[i], true); Console.SetCursorPosition(cLeft, cTop); Console.Write(lcd); Thread.Sleep(Math.Max(0, (int)(start.AddMilliseconds(step * i) - DateTime.UtcNow).TotalMilliseconds)); } lcd.RunCommand(cmds[cmds.Length - 1], true); Console.SetCursorPosition(cLeft, cTop); Console.Write(lcd); }