私はアプリケーションライフタイムのために動作する小さなバックグラウンドスレッドを持っていますが、アプリケーションがシャットダウンしてもスレッドは正常に終了します。Thread.Interruptを使用してアプリケーションシャットダウン時に長いスリープを停止する - 良い方法がありますか?
問題は、スレッドが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)
{
}
}
}
あなたは速すぎます。私はあきらめます;) – frast
すてきな解決、ありがとう:-) – Steffen
ロックを保持している間に作業スレッドが待機しているので、stop()メソッドのロックが最大15分間ブロックされる作業スレッドはロックを解除しますか? –