当程序启动时定义了两个不同的线程。默认情况下,显式创建的线程是前台线程。前台线程与后台线程的主要区别在于:进程会等待所有的前台线程完成工作后再结束工作,但是如果只剩下后台线程,则会直接结束工作。从下面的小例子可以看出。
通过定义两个线程,并手动的设置ThreadTwo对象的IsBackground属性为true来创建一个后台线程。通过配置来实现第一个线程会比第二个线程先完成。
static void Main(string[] args) { var sampleForeground = new ThreadSample(10); var sampleBackground = new ThreadSample(20); var threadOne = new Thread(sampleForeground.CountNumber); threadOne.Name = "Foreground"; threadOne.IsBackground = false;//默认false,为前台进程 var threadTwo = new Thread(sampleBackground.CountNumber); threadTwo.Name = "BackGround"; threadTwo.IsBackground = true; threadOne.Start(); threadTwo.Start(); }
public class ThreadSample { private readonly int _iterations; public ThreadSample(int iterations) { _iterations = iterations; } public void CountNumber() { for (int i = 0; i < _iterations; i++) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.5)); Console.WriteLine($"{System.Threading.Thread.CurrentThread.Name} prints {i}"); } } }
通过运行结果可以看出当前台线程运行完成后,程序结束。
若将ThreadTwo先行结束,后台线程执行结束不影响前台线程的继续执行。