C#中的前台线程和后台线程的区别

  • 前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。
  • 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动结束。

一般后台线程用于处理时间较短的任务,如在一个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时,运行结果如下:所有前台线程运行结束程序才结束。

猜你喜欢

转载自blog.csdn.net/weixin_43885532/article/details/112796232