当前位置:编程学习 > C#/ASP.NET >>

C#多线程开发2:线程挂起,恢复与中止等操作

在博文《C#多线程开发1:使用Thread类创建与启动线程》中介绍了线程的创建与启动。本文将在前文的基础之上,接着介绍线程的挂起,恢复与中止等操作。
首先回忆一下前文的知识点。
我们已经学习到:
1、创建线程
[csharp]  
ThreadStart entry = new ThreadStart(CalcSum);  
Thread workThread = new Thread(entry);  
或者
[csharp]  
Thread workThread = new Thread(new ThreadStart(CalcSum));  
线程入口方法:
[csharp] 
static void CalcSum()  
{  
     //do what you want     
}  
 
2、启动线程
[csharp]  
workThread.Start();  
 
接下来,我们来研究线程的其他操作。
此文所用实例是在前文实例的基础上做一点小变动而得到的。
一开始,给出前文的完整实例代码及运行结果(以供整体把握实例操作)。
[csharp]  
using System;  
using System.Threading;  
  
namespace ThreadExample  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {         
            ThreadStart entry = new ThreadStart(CalcSum);  
            Thread workThread = new Thread(entry);  
            workThread.Start();  
            CalcGap();  
        }  
  
        static void CalcSum()  
        {  
            long sum = 0;  
            for (long i = 0; i < 1000000000; i++)  
            {  
                sum += i;  
                if (i % 100000000 == 0 && i!=0)  
                {  
                    Console.WriteLine("workThread-->i={0}:sum={1}",i,sum);  
                }  
            }  
        }  
  
        static void CalcGap()  
        {  
            long gap = 0;  
            for (long i = 1000000000; i >=0 ; i--)  
            {  
                gap = i-1;  
                if (i % 100000000 == 0 && i != 0)  
                {  
                    Console.WriteLine("MainThread-->i={0}:gap={1}", i, gap);  
                }  
            }  
        }  
    }  
}  
运行结果:
 
实例中,存在两个线程,主线程(Main函数)和工作线程(workThread线程),主线程完成求差操作,工作线程完成求和操作。两个线程同时运行。
 
3、挂起线程
挂起线程使用Suspend()方法。
线程被挂起后,操作被停止或进入休眠状态。
被挂起的线程不占用任何处理器时间。
修改前文实例代码,修改部分如下:
[csharp]  
ThreadStart entry = new ThreadStart(CalcSum);  
Thread workThread = new Thread(entry);  
workThread.Start();  
workThread.Suspend();//挂起线程(改动部分)  
CalcGap();  
再次执行程序,得到如下结果:
 
从结果中可以看出,此时主线程正常执行,但是工作线程workThread没有被执行,因为工作线程一启动后就被挂起了,所以不会被执行。那么要想工作线程能继续执行,就需要恢复线程了。
 
4、恢复线程
线程恢复使用Resume()方法。
再次修改代码。
[csharp]  
Thread workThread = new Thread(new ThreadStart(CalcSum));  
workThread.Start();  
workThread.Suspend();//挂起线程(改动部分)  
CalcGap();  
workThread.Resume();//恢复线程(改动部分)  
上面的代码,在主线程执行完后,恢复被挂起的工作线程,执行结果如下。
对于这个结果,我们是可以预见的。
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,