C#多线程技术

C#多线程技术

ID:45581849

大小:101.00 KB

页数:23页

时间:2019-11-15

C#多线程技术_第1页
C#多线程技术_第2页
C#多线程技术_第3页
C#多线程技术_第4页
C#多线程技术_第5页
资源描述:

《C#多线程技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第9章C#多线程技术9.1线程概述使用C#编写任何程序时,都有一个入口:Main()方法。程序从Main()方法的第一条语句开始执行,直到这个方法返回为止。这样的程序结构非常适合于有一个可识别的任务序列的程序,但程序常常需要同时完成多个任务。例如在使用文字处理软件的时候,用户在输入文字的同时,软件能同步进行拼写检查而不需要用户的等待;再如在一个应用程序的打印功能中,如果程序只能执行一个任务序列,用户可能需要等待所有的打印任务完成后才能继续操作,这时就需要能让程序同时处理多个任务的能力。在C#应用程序中,第一个线程总是Main()方法,因为第一个线程是由.NET运行库开始执行的,Ma

2、in()方法是.NET运行库选择的第一个方法。后续的线程由应用程序在内部启动,即应用程序可以创建和启动新的线程。9.2.NET对多线程的支持在.NET程序设计中,线程是使用Thread类来处理的,该类在System.Threading命名空间中。一个Thread实例管理一个线程,即执行序列。通过简单实例化一个Thread对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。9.2.1线程的建立与启动假定我们需要编写一个文件压缩软件,用户点击压缩按钮后开始压缩指定的文件。因为整个压缩过程需要一定的时间才能完成,而用户此时还可能需要移动或缩放程序的窗口,甚至暂停或

3、中止当前文件的压缩。此时一般需要创建一个单独的线程来处理这个压缩过程使得在压缩过程中可以不中断用户界面的响应。因此,我们需要实例化一个Thread对象来创建这个线程://假设DoCompress是前面已经声明了的一个ThreadStart委托ThreadcompressThread=NewThread(entryPoint);这段代码指定线程对象的实例名为compressThread。在一个应用程序中创建另一个线程,执行一些任务,通常称为工作线程(workerthread),这里compressThread就是一个工作线程,而Main()方法所在的线程常被称为主线程。9.2.1线程

4、的建立与启动从代码可以看出,Thread构造函数需要一个参数,用于指定线程的入口——即线程开始执行的方法,因为我们传送的是方法的详细信息,所以需要使用委托。实际上,该委托已经在System.Threading命名空间中定义好了。它称为ThreadStart,其声明如下所示:publicdelegatevoidThreadStart();传送给构造函数的参数必须是这种类型的委托。上面的例子中是entryPoint,我们来看如何定义这个委托://实际线程执行的方法staticvoidDoCompress(){//压缩代码}ThreadStartentryPoint=newThreadS

5、tart(DoCompress);线程对象建立完成后,新线程实际上并没有执行任务,它只是在等待执行。我们需要显式地调用Thread对象的Start()方法来启动线程:compressThread.Start();此外还可以使用Thread对象的Name属性给线程赋予一个友好的名称。9.2.2线程的挂起、恢复与终止启动了一个线程后,线程将运行到所在的方法结束为止,在此期间还可以挂起、恢复或中止它。挂起一个线程就是让它进入睡眠状态,此时,线程仅是停止运行某段时间,不占用任何处理器时间,以后还可以恢复,从被挂起的那个状态重新运行。如果线程被中止,就是停止运行,Windows会永久地删除该

6、线程的所有数据,所以该线程不能重新启动。继续上面的文件压缩例子,假定由于某些原因,用户界面线程显示一个对话框,允许用户选择临时暂停压缩过程。在主线程中编写如下响应:compressThread.Suspend();如果用户以后要求恢复该线程,可以使用下面的方法:CompressThread.Resume()最后,如果用户决定不需要继续压缩的话,单击取消按钮,可以使用下面的方法:CompressThread.Abort()9.4线程的优先级如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要因而需要分配更多的CPU时间该怎么办?在这种情况下,可以在一个进程中为不同的线程指定不

7、同的优先级。一般情况下,如果有优先级较高的线程在工作,就不会给优先级较低的线程分配任何时间片,其优点是可以保证给接收用户输入的线程指定较高的优先级。在大多数的时间内,这个线程什么也不做,而其他线程则执行它们的任务。但是,如果用户输入了信息,这个线程就立即获得比应用程序中其他线程更高的优先级,在短时间内处理用户输入控件。线程的优先级定义为ThreadPriority枚举类型,取值如表9.1所示:表9.1线程的优先级及其含义9.4线程的优先级高优先级的线程可以完全阻止低优

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。