Mam wątek w tle, który działa przez cały okres użytkowania aplikacji - jednak gdy aplikacja zostanie zamknięta, wątek powinien zakończyć się z gracją.Wątek Przerwij, aby zatrzymać długi sen przy wyłączaniu aplikacji - czy istnieje lepsze podejście?
Problem polega na tym, że wątek uruchamia kod w odstępie 15 minut - co oznacza, że śpi w trybie ALOT.
Teraz, aby wydostać się z tego uśpienia, rzucam na niego przerwę - moje pytanie brzmi jednak, czy istnieje lepsze podejście do tego, ponieważ przerwania generują wyjątek ThreadInterruptedException.
Oto sedno mojego kodu (nieco 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)
{
}
}
}
Jesteś zbyt szybki. Poddaję się;) – frast
Świetne rozwiązanie, dziękuję bardzo :-) – Steffen
Nie jest to problem, że wątek roboczy czeka podczas trzymania zamka, więc blokada w metodzie stop() będzie blokować do 15 minut aż do wątek roboczy zwalnia blokadę? –