「バックグラウンドスレッド」の概念は、.NETではほとんど意味がありません。Thread.IsBackgroundプロパティは、AppDomainがアンロードされたときにスレッドを無礼に中止するかどうか、またはスレッドが自発的に終了するのを待つかどうかをCLRが判断するのに役立つ単純なフラグです。
プログラムの終了時にスレッドプールスレッドを実行し続ける場合は、プロパティを変更するだけです。このスニペットは、それがどのように可能であるかを示しています。
using System;
using System.Threading;
class Program {
static void Main(string[] args) {
var sync = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((_) => {
Console.WriteLine("Running");
Thread.CurrentThread.IsBackground = false;
sync.Set();
Thread.Sleep(5000);
Console.WriteLine("Done, should exit now");
Thread.Sleep(250);
});
sync.WaitOne(); // Ensures IsBackground is set
}
}
ここでボールに目を離さないでください。これがあなたにとって重要である場合、あなたが何か間違ったことをしている可能性が高いです。