.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);
    }
}

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


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

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

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