首页 > 编程语言 >C#中的前台线程和后台线程

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

时间:2022-09-26 10:33:27浏览次数:80  
标签:thread Thread C# 退出 线程 前台 后台

转载于:c#前台线程与后台线程的区别和联系 - 田志良 - 博客园 (cnblogs.com)

Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

  .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。下面的代码演示了前台和后台线程的区别。

 

public static void myStaticThreadMethod()
{
    Thread.Sleep(3000);
}
Thread thread = new Thread(myStaticThreadMethod);
// thread.IsBackground = true;
thread.Start()

 

  如果运行上面的代码,程序会等待3秒后退出,如果将注释去掉,将thread设成后台线程,则程序会立即退出。要注意的是,必须在调用Start方法之前设置线程的类型,否则一但线程运行,将无法改变其类型。

  通过BeginXXX方法运行的线程都是后台线程,启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thread.CurrentThread.Abort()方法关闭主线程的话,就会出现ThreadAbortException 异常,因此这样不行。后来找到了这个办法: Thread.IsBackground设置线程为后台线程。

标签:thread,Thread,C#,退出,线程,前台,后台
From: https://www.cnblogs.com/zerryLuo/p/16730018.html

相关文章

  • ContextMenuManager右键z 右键菜单
    常用软件下载https://files.cnblogs.com/files/pengchenggang/ContextMenuManager右键z-右键菜单.rar?t=1664158084......
  • python的内置函数vars,locals
    vars包含参数时,用于返回实例化对象的内部属性值,(因此,其最常用于读取parse的参数数值,以便于写入文件中记录)用于非实例化对象时,可用于查看对象的方法名等作用。在没有参数......
  • SpringCloud/Alibaba学习+Nacos/Sentinel源码(五万字长文)
    SpringCloud学习笔记未经授权不得转载,创作不易,违者必究一、微服务架构1.1应用架构发展集中式架构网站流量很小,一个应用将所有功能部署优点:系统开发速度快;维护成本......
  • 详解JS中 call 方法的实现
    摘要:本文将全面的,详细解析call方法的实现原理本文分享自华为云社区《关于JavaScript中call方法的实现,附带详细解析!》,作者:CoderBin。本文将全面的,详细解析call方法的......
  • 反射_Class对象功能_获取Field和反射_Class对象功能_获取Constructor
    反射_Class对象功能_获取Field反射_Class对象功能_获取ConstructorStudent类   pro.properties配置文件   ReflectTest类测试  想运行其他类中的方......
  • mysql too many connections
    mysqltoomanyconnections--最大连接数showvariableslike'max_connections';--最大返回数Max_used_connections/max_connections*100%应该要大于......
  • frp被阻断的故障 2022/09/25 23:42:47 [W] [service.go:82] login to server failed:
    1.公司换了办公室,发现frp无法连接上服务器,报错2022/09/2523:42:47[W][service.go:82]logintoserverfailed:EOFEOF开始怀疑是frp的版本问题,于是客户端和服务端......
  • PC端网页特效-元素偏移量 offset 系列
    PC端网页特效—元素偏移量offset系列1.offset概述​offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。获得元素......
  • c++笔记
    数据类型的意义在于给变量分配合适的内存空间,防止资源浪费#define定义常量一、整型:short、int、long、longlong    超出数值将会在另一端显示(衔尾蛇)sizeof(数......
  • css实现tooltip效果
      <!--html代码--><divclass="wrap"><h1>TOOLTIP提示</h1><p>鼠标移动到<spanclass="tooltip"tooltip-data="提示框内容">这里</span>查......