public static void Slice() { int breakCount = 100; ArrayList readd = new ArrayList(); while (!m_Heap.IsEmpty && ((Timer)m_Heap.Peek()).TimeUntilTick < TimeSpan.Zero) { if (breakCount-- <= 0) { break; } Timer t = (Timer)m_Heap.Pop(); if (t != null && t.Running) { t.OnTick(); if (t.Running && (t.m_Count == 0 || (++t.m_Index) < t.m_Count)) { t.m_Next = DateTime.Now + t.m_Interval; readd.Add(t); } else { t.Stop(); } } } m_Heap.AddMultiple(readd); ChangedNextTick(); }