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