LZY'Blog

记录LZY的生活、行程!

« C#通过修改注册表对电脑“开始”菜单与任务栏进行设置线程的创建 »

Thread类的常用属性、方法及说明

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

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

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

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

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

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

表2 Thread类的常用方法及说明
方法 说明
Abort 在调用该方法的线程上引发ThreadAbortException,以开始终止该线程的过程。调用该方法通常会终止线程
GetApartmentState 返回一个ApartmentState值,该值指示单元状态
GetDomain 返回当前线程正在其中运行的当前域
GetDomainID 返回唯一的应用程序域标识符
Interrupt 中断处于WaitSleepJoin线程状态的线程
Join 阻止调用线程,直到某个线程终止时为止
ResetAbort 取消为当前线程请求的Abort
Resume 继续已挂起的线程
SetApartmentState 在线程启动前设置其单元状态
Sleep 将当前线程阻止指定的毫秒数
SpinWait 导致线程等待由iterations参数定义的时间量
Start 使线程被安排进行执行
Suspent 挂起线程,或者如果线程已挂起,则不起作用
VolatileRead 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值
VolatileWrite 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见

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

  【例】创建一个Windows应用程序,在窗体中添加一个RichTextBox控件,用来显示获得的线程相关信息。

  代码如下:

//引用 using System.Threading; 命名空间
private void Form1_Load(object sender, EventArgs e)
{
    string strInfo = string.Empty;                             //定义一个字符串,用来记录线程相关信息
    Thread myThread = new Thread(new ThreadStart(threadOut));  //实例化Thread线程类对象
    myThread.Start();                                          //启动新的线程
    //获取线程相关信息
    strInfo = "线程唯一标识符:" + myThread.ManagedThreadId;
    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 显示新开线程的相关信息

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 |

Copyright 2009-2012 LZY'Blog. | ICP:蜀ICP备05027543号