c# 前台线程 后台线程

参考地址

 新建的子线程可以是前台线程或者后台线程,前台线程必须全部执行完,即使主线程关闭掉,这时进程仍然存活。后台线程在未执行完成时,如果前台线程关掉,则后台线程也会停掉,且不抛出异常。也就是说,前台线程与后台线程唯一的区别是后台线程不会阻止进程终止。可以在任何时候将前台线程修改为后台线程。

 在C#中,Thread类默认创建的是前台线程,通过线程池(后面会讲到)创建的线程都是后台线程。

一定要注意的是比如说一个控制台程序,如下

static void Main(string[] args)
{
    //后台线程不阻止主线程的关闭
    Thread th = new Thread(delegate()
    {
        Thread.Sleep(6000);
    //创建一个测试文件夹
      Directory.CreateDirectory(@"D:\TESTS\测试");

    });
    th.IsBackground = true;
    th.Start();

    Console.WriteLine("main thread end");
}

 

 

这时候是创建不了的,因为6秒还没过,Main方法就走完了,线程th是后台线程,无法阻止主线程这个前台线程,所以导致整个进程关闭了,自然子线程的方法就执行不了了。一定要注意在控制台中是这样的,因为走完Main方法控制台程序自然就关闭了,整个进程自动终止了。如果是MVC,winform这样的话走完Main整个程序是不会自动关闭的,th这个后台线程在等待6秒后是会接着执行的。一定不要弄混了。如果th设置成前台线程,只有子线程th执行完毕之后整个控制台程序才会关闭。

 

posted @ 2021-09-19 11:16  安静点--  阅读(408)  评论(0编辑  收藏  举报