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   

相关文章
|
5天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
5天前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
5天前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
5天前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
5天前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
|
5天前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
|
5天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
5天前
|
安全 Java C#
C#多线程详解
C#多线程详解
14 0
|
5天前
|
C#
c#一文读懂continue、return、break区别
c#一文读懂continue、return、break区别
10 0
|
5天前
|
调度
线程和进程的区别?
线程和进程的区别?