C# 前台线程与后台线程区别

简介: 1、理论两者区别: 应用程序必须运行完所有前台线程后才能退出; 对于后台线程,应用程序可以不考虑其是否已运行完毕而直接退出,所有后台线程在应用程序退出时都会自动结束。 2、案例说明 前台线程与后台线程的执行与应用程序: (1)代码演示 点击(此处)折叠或打开using System; using System.

1、理论两者区别:

应用程序必须运行完所有前台线程后才能退出;

对于后台线程,应用程序可以不考虑其是否已运行完毕而直接退出,所有后台线程在应用程序退出时都会自动结束。

2、案例说明

前台线程与后台线程的执行与应用程序:

(1)代码演示


点击(此处)折叠或打开

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;

  6. namespace BackgroundAndForeground
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             BackgroundTest shortTest = new BackgroundTest(10);
  13.             Thread foregroundThread =
  14.                 new Thread(new ThreadStart(shortTest.RunLoop));
  15.             foregroundThread.Name = "ForegroundThread";


  16.             /* 这个将函数封装到一个类的方法较少用,试试 */
  17.             BackgroundTest longTest = new BackgroundTest(50);

  18.             Thread backgroundThread =
  19.                 new Thread(new ThreadStart(longTest.RunLoop));
  20.             backgroundThread.Name = "BackgroundThread";
  21.             backgroundThread.IsBackground = true; /* 后台线程的生成 */
  22.  

  23.             foregroundThread.Start();
  24.             backgroundThread.Start();

  25. // Console.ReadLine();
  26.         }
  27.     }

  28.     ///
  29.     /// 本类里的函数做线程的回调函数
  30.     ///
  31.     class BackgroundTest
  32.     {
  33.         int maxIterations;

  34.         public BackgroundTest(int maxIterations)
  35.         {
  36.             this.maxIterations = maxIterations;
  37.         }

  38.         /* 根据传进来的时间执行循环次数 */
  39.         public void RunLoop()
  40.         {
  41.             /* 注意获取线程名字的方法 */
  42.             String threadName = Thread.CurrentThread.Name;

  43.             for (int i = 0; i maxIterations; i++)
  44.             {
  45.                 Console.WriteLine("{0} count: {1}",threadName, i.ToString());
  46.                 Thread.Sleep(250);
  47.             }

  48.             Console.WriteLine("{0} finished counting.", threadName);
  49.         }
  50.     }

  51. }

(2)执行效果

image

图 main中不加ReadLine

image

图 main中加ReadLine

 

3、工程源代码

rar.gif BackgroundAndForeground.rar   

相关文章
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
368 0
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
787 7
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
565 1
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
751 1
|
Dubbo Java 应用服务中间件
剖析Tomcat线程池与JDK线程池的区别和联系!
剖析Tomcat线程池与JDK线程池的区别和联系!
781 0
剖析Tomcat线程池与JDK线程池的区别和联系!
|
NoSQL 网络协议 Unix
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
601 2
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
469 1
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
1107 5

热门文章

最新文章