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 类的常用属性及说明
Thread 类的常用方法及说明如表2 所示。
表2 Thread 类的常用方法及说明
【例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 线程开始运行
图2 线程运行结束
图3 主窗体
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 -
关注小编不迷路呦
-----------------------------------
需要进技术群交流的,请添加小编zls20210502!