C# 线程的基本操作(一)

本文详细介绍了C#中如何使用Thread类进行线程操作,包括线程的创建、启动、属性设置、状态检查以及线程同步。通过示例展示了如何创建线程并获取线程信息,强调了Thread类的重要属性和方法,以及线程的生命周期管理。此外,还提及了Monitor类、Mutex类和lock关键字在多线程同步中的应用。
摘要由CSDN通过智能技术生成

 C# 中对线程进行操作时,主要用到了 Thread 类,该类位于 System.Threading 命名空间下。通过使用的目 Thread 类,可以对线程进行创建、暂停、恢复、休眠、终止及设置优先权等操作。另外,还可以通过使用 Monitor 类、Mutex 类和 lock 关键字控制线程间的同步执行。下面将对 Thread类及线程的基本操作进行详细讲解。

01  Thread 类

 Thread 类位于 System.Threading 命名空间下,System.Threading 命名空间提供一些可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked 和 AutoResetEvent 等)外, 该命名空间还包含一个 ThreadPool 类(它允许用户使用系统提供的线程池)和一个 Timer 类(它在线程池的线程上执行回调方法)。

 Thread 类主要用于创建并控制线程、设置线程优先级并获取其状态。一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码,线程执行的程序代码由 ThreadStart 委托或ParameterizedThreadStart 委托指定。

 线程运行期间,不同的时刻会表现为不同的状态,但它总是处于由 ThreadState 定义的一个或多个状态中。用户可以通过使用 ThreadPriority 枚举为线程定义优先级,但不能保证操作系统会接受该优先级。

 Thread 类的常用属性及说明如表1 所示。

表1  Thread 类的常用属性及说明

3779ab8ed4a9f03332350e1d0e338532.png

Thread 类的常用方法及说明如表2 所示。

表2 Thread 类的常用方法及说明

0347d6401069840cc6761979b5a4884f.png

【例1】 下面演示使用 Thread 类的相关方法和属性,开始运行一个线程,并获得该线程的相关信息。

 程序开发步骤如下:

(1)新建一个 Windows 应用程序,并命名为 1,默认窗体为 Forml.cs。

(2)在 Form1 窗体中添加一个 RichTextBox 控件,用来显示获得的线程相关信息。

 (3)程序主要代码如下:

private void Form1_Load(object sender,EventArgs e) 
{
     string strInfo = string.Empty;                               //定义一个字符串,用来记录线程相关信息    
     Thread myThread = new Thread(new ThreadStart(threadOut));    //实制化 Thread 线程类对象
     myThread.Start();                                            //启动主线程
     //获取线程相关信息
     strInfo = "线程唯一标识符:"+ myThread.ManagedThreadld;
     strInfo += "\n 线程名称:"+ myThread.Name;
     strInfo += "\n 线程状态:" + myThread.ThreadState.ToString();
     strInfo += "\n 线程优先级:" + myThread.Priority.ToString();
     strInfo += "\n 是否为后台线程:" + myThread.IsBackground;
     Thread.Sleep(1000);                           //使主线程休眠 1 秒钟
     myThread.Abort("退出");                       //通过主线程阻止新开线程
     myThread.Join();                             //等待新开的线程结束
     MessageBox.Show("线程运行结束");
     richTextBox1.Text = strInfo;
 }
 public void threadOut()
 {
     MessageBox.Show("主线程开始运行")
 }

注意

在程序中使用线程时,需要在命名空间区域添加 using、System、Threading 命名空间,下面遇到时将不再提示。

运行程序,先后弹出如图1 和图2 所示的对话框,然后显示如图3 所示的主窗体,并在主窗体中显示获得的线程相关信息。

图1  线程开始运行

fc381908f674ef583295c240bfd2360c.png

图2  线程运行结束

023663b7b249c1cf91e5423755081411.png

图3  主窗体 

79079d7e0c389089783198cad8b00494.png

02  创建线程

创建一个线程非常简单,只需将其声明并为其提供线程起始点处的方法委托即可,创建新的线程时,需要使用 Thread 类,该类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数,该委托包装了调用 Start 方法时由新线程调用的方法。创建了 Thread 类的对象之后,线程对象已存在并已配置,但并未创建实际的线程,这时,只有在调用 Start 方法后,才会创建实际的线程。

Start 方法用来使线程被安排执行,它有两种重载形式,下面分别进行介绍。

(1)导致操作系统将当前实例的状态更改为 ThreadState.Running。

 语法如下:

  public void Start()

(2)导致操作系统将当前实例的状态更改为 ThreadState Running,并选择提供包含线程执行的方法要使用的数据的对象。

 语法如下:

 public void Start(Object parameter)

 parameter:一个对象,包含线程执行的方法要使用的数据。

注意

如果线程已经终止,就无法通过再次调用 Start 方法来重新启动。

【例2】 创建一个控制台应用程序,其中自定义一个静态的 void 类型方法 createThread。然后在 Main 方法中通过实例化 Thread 类对象创建一个新的线程,最后调用 Start 方法启动该线程。

代码如下:

static void Main(string[] args)
{                                                  
     Thread myThread;                                      //声明线程 
     //用线程起始点的 ThreadStart 委托创建该线程的实例
     myThread = new Thread(new ThreadStart(createThread);
     myThread.Start();                                     //启动线程
} 
public static void createThread()
{
     Console.Write("创建线程");
}

注意

线程的入口(为 createThread)不带任何参数

- END -


7ab0a6d2a790bd7bea138fb020273afb.png


关注小编不迷路呦

-----------------------------------

需要进技术群交流的,请添加小编zls20210502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值