- 前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。
- 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动结束。
一般后台线程用于处理时间较短的任务,如在一个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 = true时,运行结果如下:所有前台线程运行结束程序才结束。