Ich habe einen kleinen Hintergrund-Thread, der für die Lebensdauer der Anwendungen ausgeführt wird - aber wenn die Anwendung heruntergefahren wird, sollte der Thread ordnungsgemäß beendet werden.Thread.Interrupt, um langen Schlaf bei App-Shutdown zu stoppen - Gibt es einen besseren Ansatz
Das Problem ist, dass der Thread einige Code in einem Intervall von 15 Minuten ausführt - was bedeutet, dass es viel schläft.
Jetzt, um es aus dem Schlaf zu bekommen, ich werfen einen Interrupt - meine Frage ist jedoch, wenn es einen besseren Ansatz dazu ist, da Interrupts ThreadInterruptedException generieren.
Hier ist der Kern meines Code (etwas pseudo):
public class BackgroundUpdater : IDisposable
{
private Thread myThread;
private const int intervalTime = 900000; // 15 minutes
public void Dispose()
{
myThread.Interrupt();
}
public void Start()
{
myThread = new Thread(ThreadedWork);
myThread.IsBackground = true; // To ensure against app waiting for thread to exit
myThread.Priority = ThreadPriority.BelowNormal;
myThread.Start();
}
private void ThreadedWork()
{
try
{
while (true)
{
Thread.Sleep(900000); // 15 minutes
DoWork();
}
}
catch (ThreadInterruptedException)
{
}
}
}
Sie sind zu schnell. Ich gebe auf;) – frast
Tolle Lösung, vielen Dank :-) – Steffen
Ist hier nicht das Problem, dass der Arbeitsfaden beim Festhalten der Sperre wartet, so dass die Sperre in der stop() -Methode für bis zu 15 Minuten blockieren würde bis die Arbeitsfaden löst das Schloss? –