如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
HYPERLINK"http://www.cnblogs.com/webman/archive/2006/11/19/564903.html"C#中的多线程编程C#是.Net平台的通用开发工具,它能够建造所有的.Net应用。在.Net中所有线程都运行在应用程序域(AppDomain)中,这也许让你想到Win32进程,实际上它们还是有很大的不同。应用程序域提供了一种安全而通用的处理单元,公共语言运行库可使用它来隔离应用程序。注意在.Net中应用程序的隔离是应用程序域而不是进程,在单个进程中可以存在几个应用程序域,而且线程可以跨越应用程序域的范围,某个线程中的方法可以调用另一个线程的方法,这样的话就不会造成进程间调用或进程间切换等方面的额外开销。可以说应用程序域是物理进程(也即win32中的Process)内的逻辑进程。在VisulC#中System.Threading命名空间提供一些使得可以进行多线程编程的类和接口,其中线程的创建有以下三种方法:Thread、ThreadPool、Timer。下面我就它们的使用方法逐个作一简单介绍。1.Thread这也许是最复杂的方法,但它提供了对线程的各种灵活控制。首先你必须使用它的构造函数创建一个线程实例,它的参数比较简单,只有一个ThreadStart委托:[C#]publicThread(ThreadStartstart);然后调用Start()启动它,当然你可以利用它的Priority属性来设置或获得它的运行优先级(enumThreadPriority:Normal、Lowest、Highest、BelowNormal、AboveNormal)。见下例:它首先生成了两个线程实例t1和t2,然后分别设置它们的优先级,接着启动两线程(两线程基本一样,只不过它们输出不一样,t1为“1”,t2为“2”,根据它们各自输出字符个数比可大致看出它们占用CPU时间之比,这也反映出了它们各自的优先级)。staticvoidMain(string[]args){Threadt1=newThread(newThreadStart(Thread1));Threadt2=newThread(newThreadStart(Thread2));t1.Priority=ThreadPriority.BelowNormal;t2.Priority=ThreadPriority.Lowest;t1.Start();t2.Start();}publicstaticvoidThread1(){for(inti=1;i<1000;i++){//每运行一个循环就写一个“1”dosth();Console.Write("1");}}publicstaticvoidThread2(){for(inti=0;i<1000;i++){//每运行一个循环就写一个“2”dosth();Console.Write("2");}}publicstaticvoiddosth(){//用来模拟复杂运算for(intj=0;j<10000000;j++){inta=15;a=a*a*a*a;}}以上程序运行结果为:111111111111111111111111111111111111111111211111111111111111111111111111111111111111121111111111111111111111111111111111111111112111111111111111111111111111111111111111111211111111111111111111111111111111111111111121111111111111111111111111111111111111111112从以上结果我们可以看出,t1线程所占用CPU的时间远比t2的多,这是因为t1的优先级比t2的高,若我们把t1和t2的优先级都设为Normal,那结果是如何?它们所占用的CPU时间会一样吗?是的,正如你所料,见下图:121211221212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212从上例我们可看出,它的构造类似于win32的工作线程,但更加简单,只需把线程要调用的函数作为委托,然后把委托作为参数构造线程实例即可。当调用Start()启动后,便会调用相应的函数,从那函数第一行开始执行。接下来我们结合线程的ThreadState属性来了解线程的控制。ThreadState是一个枚举类型,它反