我有一个在应用程序生命周期内运行的小型后台线程 - 但是当应用程序关闭时,线程应该正常退出。
问题是线程以 15 分钟的间隔运行一些代码 - 这意味着它睡眠很多。
现在为了让它脱离睡眠状态,我向它抛出一个中断——但是我的问题是,如果有更好的方法来解决这个问题,因为中断会产生 ThreadInterruptedException。
这是我的代码的要点(有点伪):
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)
{
}
}
}