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 @   安静点--  阅读(417)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示