Ich habe einen Audioplayer, der eine Konfigurationsdatei mit einer Liste von Dateien lädt, die in bestimmten Intervallen abgespielt werden sollen. Wie 5 Dateien sollte zwischen 09:30 und 11:30 Uhr geloopt werden - es ist eine Anwendung für Bibliotheken, wo sie die Hintergrundmusik benötigen.Wie kann ich eine Stackoverflow-Ausnahme in meiner Software verhindern?
Wenn ich außerhalb eines Intervalls bin, durchlaufe ich alle meine Zeitintervalle (es könnte 2 Stunden vor dem nächsten Intervall sein) und wenn ich dann finde, dass nichts gespielt werden soll - ich schlafe für eine Sekunde und dann Versuch es noch einmal.
Ich habe ein Problem, wo ich einen Stapelüberlauf nach etwa 3-4 Stunden der Überprüfung für diese Zeitintervalle bekommen (oft nachts, weil die Clients eingeschaltet sind, aber keine Musik sollte in der Nacht spielen).
private void PlayNextFile()
{
Application.DoEvents();
if (currentState == PlayerState.Started)
{
//if we find the next slide then play it
AudioSlide slideToPlay = FindNextSlide();
if(slideToPlay != null)
{
PlaySlide(slideToPlay);
}
else
{
MedianLog.Log.Instance.LogDebug("Did not find a slide to play now, will check again in a second");
System.Threading.Thread.Sleep(1000);
PlayNextFile();
}
}
}
Haben Sie eine Idee, wie Sie diese Ausnahme umgehen können?
Dup: http://stackoverflow.com/questions/4825530/preventing-stackoverflow-in-recursive-functions –
Vielleicht so etwas wie eine „nächste Datei“ queue Abfüll- und diese Warteschlange regelmäßig verarbeiten? –
Erstellen Sie eine While-Schleife anstelle einer Rekursion. –