.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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д