首页 > 编程笔记 > C#笔记 阅读:2

C# Thread类实现多线程编程(附带实例)

C# 中通过使用 Thread 类实现多线程编程。Thread 类位于 System.Threading 命名空间中,该类主要用于创建并控制线程、设置线程优先级并获取其状态。

创建线程需要使用 Thread 类的构造函数,其语法格式如下:
public Thread(ThreadStart start)
public Thread(ParameterizedThreadStart start)
参数 start 表示一个 ThreadStart 委托或者 ParameterizedThreadStart 委托,它表示线程开始执行时要调用的方法。

Thread 类的常用属性及说明如下表所示:

表:Thread类的常用属性及说明
属性 说明
ApartmentState 获取或设置此线程的单元状态
CurrentContext 获取线程正在其中执行的当前上下文
CurrentThread 获取当前正在运行的线程
IsAlive 获取一个值,该值指示当前线程的执行状态
ManagedThreadId 获取当前托管线程的唯一标识符
Name 获取或设置线程的名称
Priority 获取或设置一个值,该值指示线程的调度优先级
ThreadState 获取一个值,该值包含当前线程的状态

Thread 类的常用方法及说明如下表所示:

表:Thread 类的常用方法及说明
方法 说明
Abort 在调用此方法的线程中引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程
Join 阻塞调用线程,直到某个线程终止或经过了指定时间为止
Sleep 将当前线程挂起/阻塞指定的时间
SpinWait 导致线程等待由 iterations 参数定义的时间量
Start 开始执行线程

创建 Thread 类的对象之后,线程对象已存在并已配置,但并未创建实际的线程,这时,只有在调用 Start 方法后,才会创建实际的线程。
Start 方法用来开始执行线程,它有两种重载形式,下面分别介绍。

1) 导致操作系统将当前实例的状态更改为 ThreadState.Running,语法如下:
public void Start()

2) 使操作系统将当前实例的状态更改为 ThreadState.Running,并选择线程执行所需要的方法。语法如下:
public void Start(object parameter)
其中,参数 parameter 为一个 Object 对象,包含线程执行的方法要使用的数据。

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


【实例】向右移动的 C# 图标。创建一个 Windows 窗体应用程序,实现图标移动的功能。具体实现过程为:首先在窗体中添加一个 PictureBox 控件,并设置相应的 C# 图标,然后使用 Thread 线程控制该控件的坐标位置,从而实现移动图标的效果。主要代码如下:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        CheckForIllegalCrossThreadCalls = false; // 使线程可以调用窗体控件
    }

    int x = 12; // 定义图标初始横坐标位置

    void Roll()
    {
        while (x <= 260) // 设置循环条件
        {
            // 将图标的横坐标用变量表示
            pictureBox1.Location = new Point(x, 12);
            Thread.Sleep(500); // 使线程休眠 500 毫秒
            x += 4;            // 使横坐标每次增加 4
            if (x >= 260)
                x = 12;        // 当图标到达最右边时回到最左边
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Thread th = new Thread(new ThreadStart(Roll)); // 创建线程对象
        th.Start();                                     // 启动线程
    }
}
当运行程序时,C# 图标从初始位置开始启动,如下图所示:


图 1 图标初始位置

移动中的 C# 图标效果如下图所示:


图 2 图标移动过程中

图标从左向右移动,移动到最右侧的效果如下图所示:


图 3 图标移动到窗体最右侧

相关文章