-
前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。
-
后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动结束。
一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。
如何将线程设置为前台或后台线程?
thread1.IsBackground = false;//将thread1设置为前台线程(默认状态)
fThread.IsBackground = true;//将thread1设置为后台线程
修改如下代码中的bThread线程的前后台属性可体会前台线程和后台线程的区别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;namespace ConsoleApplication1
{class Program{static void Main(string[] args){ThreadTest backGround = new ThreadTest(3);Thread fThread = new Thread(new ThreadStart(backGround.Test));fThread.Name = "前台线程";fThread.IsBackground = false;ThreadTest backGround1 = new ThreadTest(5);Thread bThread = new Thread(new ThreadStart(backGround1.Test));bThread.IsBackground = true;bThread.Name = "后台线程";fThread.Start();bThread.Start();}}class ThreadTest{private int count = 0; //私有数据//构造函数public ThreadTest(int count){this.count = count;}public void Test(){string threadName = Thread.CurrentThread.Name;for (int i = 0; i < count; i++){Console.WriteLine("{0}计数:{1}", threadName, i);Thread.Sleep(500);}Console.WriteLine("{0}完成计数", threadName);}}
}
当bThread.IsBackground = true时,运行结果如下:前台线程运行完成后后台线程立即结束。
当bThread.IsBackground = false时,运行结果如下:所有前台线程运行结束程序才结束。