.NET 3.x Бесконечный цикл в потоке, StackOverflowException - C#

Узнай цену своей работы

Формулировка задачи:

Мне нужна рекурсия в отдельном потоке, перебирающая делегаты и вызывающая их в соответствии с секундомером. При работе более 10 секунд вылетает StackOverflowException (а если убрать Sleep, то вообще сразу). Стек вызовов заполнен предпоследней строкой метода - Tick(Input). Можно ли приостановить заполнение стека до выполнения метода? Или как еще это можно исправить? Код:
Листинг программы
  1. private static Stopwatch Ticker = new Stopwatch();
  2. private Thread TickerThread = new Thread(Tick);
  3. private void Tick(object Input)
  4. {
  5. List<double> clear = new List<double>();
  6. foreach (double time in Functions.Keys)
  7. {
  8. if (time <= Elapsed)
  9. {
  10. Functions[time].DynamicInvoke();
  11. clear.Add(time);
  12. }
  13. }
  14. foreach (double time in clear)
  15. Functions.Remove(time);
  16. Elapsed = Ticker.ElapsedMilliseconds;
  17. Tick(Input)
  18. Thread.Sleep(1);
  19. }

Решение задачи: «.NET 3.x Бесконечный цикл в потоке, StackOverflowException»

textual
Листинг программы
  1. private void Tick(object Input)
  2. {
  3.     while (true) {
  4.       List<double> clear = new List<double>();
  5.       foreach (double time in Functions.Keys)
  6.       {
  7.           if (time <= Elapsed)
  8.           {
  9.               Functions[time].DynamicInvoke();
  10.               clear.Add(time);
  11.           }
  12.       }
  13.       foreach (double time in clear)
  14.           Functions.Remove(time);
  15.       Elapsed = Ticker.ElapsedMilliseconds;
  16.       Thread.Sleep(1);
  17.     }
  18. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут