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;