diff --git a/Terminal.Gui/Core/MainLoop.cs b/Terminal.Gui/Core/MainLoop.cs index 7c4076eec..493e3be48 100644 --- a/Terminal.Gui/Core/MainLoop.cs +++ b/Terminal.Gui/Core/MainLoop.cs @@ -120,10 +120,7 @@ namespace Terminal.Gui { { lock (timeoutsLockToken) { var k = (DateTime.UtcNow + time).Ticks; - while (timeouts.ContainsKey (k)) { - k = (DateTime.UtcNow + time).Ticks; - } - timeouts.Add (k, timeout); + timeouts.Add (NudgeToUniqueKey(k), timeout); } } @@ -191,13 +188,30 @@ namespace Terminal.Gui { AddTimeout (timeout.Span, timeout); } else { lock (timeoutsLockToken) { - timeouts.Add (k, timeout); + timeouts.Add (NudgeToUniqueKey(k), timeout); } } } } + /// + /// Finds the closest number to that is not + /// present in (incrementally). + /// + /// + /// + private long NudgeToUniqueKey (long k) + { + lock(timeoutsLockToken) { + while (timeouts.ContainsKey (k)) { + k++; + } + } + + return k; + } + void RunIdle () { List> iterate;