当前位置:嗨网首页>书籍在线阅读

07-启动线程

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

21.2.2 启动线程

现在我们有了一个线程,如何启动这个线程呢?在Thread中提供了Start方法,通过调用该方法就可以启动线程。

新建并启动一个线程的代码如下。

ThreadSimple.Start();

在Thread这个类中以对象的方式提供了一些必要的实例成员,其中比较常用的有以下8个。

  • IsAlive:判断线程是否处于活动状态。
  • Name:线程的名称。
  • Priority:ThreadPriority枚举类型,代表线程的优先级。
  • ThreadState:ThreadState枚举类型,代表线程的状态。
  • Start:启动一个线程。
  • Suspend:挂起一个线程的运行。
  • Resume:继续挂起的线程。
  • Abort:结束一个线程的运行。

线程创建完毕并启动之后,要控制线程,还有以下几件事情需要完成。

(1)线程的优先级。ThreadPriority属性用于设置线程的级别。在枚举类型ThreadPriority中定义了以下成员,分别对应一种线程级别。

  • Normal:普通级别。
  • AboveNormal:高于普通级别。
  • BelowNormal:低于普通级别。
  • Highest:最高级别。
  • Lowest:最低级别。

下面的语句把线程的级别设成了最高。

ThreadSimple.priority = ThreadPriority.Highest;

(2)线程的休眠。休眠线程是让进程进入一定时间的休眠状态,时间一到,线程将继续运行。这可以通过Thread的Sleep方法实现。Thread类中有两个重载的Sleep方法,一个带有int类型的参数,用于指定休眠的毫秒数;另一个带有TimeSpan类型的参数,用于指定休眠的时间段。

例如,下面的两个Sleep调用效果是相同的,都是休眠10秒。

Thread.Sleep(10000);
Thread.Sleep(New TimeSpan(0, 0, 0, 0, 10000));

(3)线程的挂起。和休眠不同,线程的挂起是暂停线程,如果不再启动线程,它将永远保持暂停状态。只有当前运行的线程才可以挂起,对已经挂起的线程实施挂起操作没有任何效果。代码如下。

01  //如果线程的状态是运行
02  if (NewThread.ThreadState = = ThreadState.Running)
03  {
04          //线程挂起
05          NewThread.Suspend();
06  }

这里通过查询Thread的ThreadState属性检查线程是否在运行。

(4)线程的继续。挂起线程后可以使用Thread.Resume方法继续运行。对没有挂起的线程使用继续操作没有任何结果。代码如下。

01  //如果线程的状态是挂起
02  if (NewThread.ThreadState = ThreadState.Suspended)
03  {
04          //线程继续
05          NewThread.Resume();
06  }

刚才我们学习了线程中的实例成员,怎么用呢?能否给线程命名,并且输出线程的名字呢?这个是完全可以做到的,用上面给出的实例方法写成如下的代码就可以做到。

【范例21-5】 在C#中输出线程的名字。

(1)在Visual Studio 2013中新建一个控制台应用程序,项目名称为“paraE”。 在自动生成的“Program.cs”程序中添加导入Threading命名空间语句“using System.Threading;”。

(2)在Program.cs的Main方法中添加以下代码进行测试(代码21-5-1.txt)。

01  static void Main(string[] args)
02  {
03          //给当前线程起名为“笑傲江湖”
04          Thread.CurrentThread.Name = "笑傲江湖";
05          //输出线程名字和线程状态
06          Console.WriteLine("主线程名字:" +  Thread.CurrentThread.Name + "主线程状态:" + Thread.CurrentThread.ThreadState);
07          //等待延时
08          Console.ReadLine();
09  }

【运行结果】

运行结果如下图所示。

371.png 线程的操作就是如此轻松,所需要的核心语句不用很多,就可以对线程进行控制。