.NET 3.x Бесконечный цикл в потоке, StackOverflowException - C#
Формулировка задачи:
Мне нужна рекурсия в отдельном потоке, перебирающая делегаты и вызывающая их в соответствии с секундомером.
При работе более 10 секунд вылетает StackOverflowException (а если убрать Sleep, то вообще сразу). Стек вызовов заполнен предпоследней строкой метода - Tick(Input).
Можно ли приостановить заполнение стека до выполнения метода? Или как еще это можно исправить?
Код:
private static Stopwatch Ticker = new Stopwatch(); private Thread TickerThread = new Thread(Tick); private void Tick(object Input) { List<double> clear = new List<double>(); foreach (double time in Functions.Keys) { if (time <= Elapsed) { Functions[time].DynamicInvoke(); clear.Add(time); } } foreach (double time in clear) Functions.Remove(time); Elapsed = Ticker.ElapsedMilliseconds; Tick(Input) Thread.Sleep(1); }
Решение задачи: «.NET 3.x Бесконечный цикл в потоке, StackOverflowException»
textual
Листинг программы
private void Tick(object Input) { while (true) { List<double> clear = new List<double>(); foreach (double time in Functions.Keys) { if (time <= Elapsed) { Functions[time].DynamicInvoke(); clear.Add(time); } } foreach (double time in clear) Functions.Remove(time); Elapsed = Ticker.ElapsedMilliseconds; Thread.Sleep(1); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д