J'ai un petit thread d'arrière-plan qui court pour la durée de vie des applications - cependant lorsque l'application est arrêtée, le thread devrait quitter normalement.Thread.Interrupt pour arrêter le long sommeil à l'arrêt de l'application - Y at-il une meilleure approche
Le problème est que le thread exécute du code à un intervalle de 15 minutes - ce qui signifie qu'il dort ALOT.
Maintenant, afin de le sortir de sommeil, je lance une interruption à elle - ma question est cependant, s'il y a une meilleure approche à cela, puisque les interruptions génèrent ThreadInterruptedException.
est ici l'essentiel de mon code (un peu 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)
{
}
}
}
Vous êtes trop rapide. J'abandonne;) – frast
Grande solution, merci beaucoup :-) – Steffen
N'est pas le problème ici que le thread de travail attend en tenant le verrou, de sorte que le blocage de la méthode stop() bloquerait jusqu'à 15 minutes jusqu'à la thread de travail libère le verrou? –