欢迎来到天天文库
浏览记录
ID:39538184
大小:770.50 KB
页数:33页
时间:2019-07-05
《《C#WinForm实践开发教程》chp5.多线程编程技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、--------------基于C#语言主讲教师:钱哨本课学时:72课时联系方式:qianshao@bjjtxy.bj.cnWindows程序设计第五章、多线程编程技术本章主要内容介绍5.1计算机线程介绍5.2System.Threading简介5.3线程的优先级与锁技术CONTENT本章学习目标:理解线程的概念理解.NET中线程的属性和方法创建和使用线程理解线程的特点、优点及使用场合同时执行所有任务,时间更少,效率更高人体5.1线程简介读,写一览无遗血液循环在同一时间点执行各项进程编译程序发送/接收邮件打印文件其他操
2、作系统允许计算机同时执行多项操作程序(进程)5.1线程简介程序1程序2线程1线程2线程3线程1线程2线程3单独的执行路径多线程5.1线程简介进程:是应用程序的一个运行例程,是应用程序的一次动态执行过程。线程:是进程中的一个执行单元;是操作系统分配CPU时间的基本单元。Windows是一个支持多线程的系统。一个进程可以包含若干个线程。5.1线程简介在以下情况中可能要使用到多线程:程序需要同时执行两个或多个任务程序要等待某事件的发生,例如用户输入、文件操作、网络操作、搜索等后台程序5.1线程简介多线程:在同一时间执行多个任
3、务的功能,称为多线程或自由线程。多线程的优点:可以同时完成多个任务;可以使程序的响应速度更快;可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;可以随时停止任务;可以设置每个任务的优先级以优化程序性能。多线程的缺点:对资源的共享访问可能造成冲突(对共享资源的访问进行同步或控制);程序的整体运行速度减慢等等。在C#应用程序中,第一个线程总是Main()方法,因为第一个线程是由.NET运行库开始执行的,Main()方法是.NET运行库选择的第一个方法。后续的线程由应用程序在内部启动,即应用程序
4、可以创建和启动新的线程。5.2System.Threading命名空间5.2System.Threading命名空间在.NET程序设计中,线程是使用Thread类(或Timer类(线程计数器)、ThreadPool类(线程池))来处理的,这些类在System.Threading命名空间中:usingSystem.Threading;Thread类:(实现线程的主要方法)一个Thread实例管理一个线程,即执行序列。通过简单实例化一个Thread对象,就可以创建一个线程,然后通过Thread对象提供的方法对线程进行管理。
5、Timer类:适用于间隔性的完成任务。ThreadPool类:适用于多个小的线程。1、Thread类的属性和方法引用System.Threading命名空间Thread线程实例名=newThread(newThreadStart(方法名));运行在线程上的方法只创建但不启动线程线程实例名.Start();1、Thread类的属性和方法属性CurrentThread获取当前正在运行的线程IsAlive指示当前线程的执行状态Name获取或设置线程的名称Priority获取或设置线程的优先级CurrentContext获取线
6、程其中执行的当前上下文IsBackground指示线程是否为后台线程ThreadState获取或设置线程的当前状态方法Sleep()将当前线程阻塞指定的毫秒数Abort()终止线程Join()阻塞调用线程,直到某个线程终止时为止Resume()继续已挂起的线程Start()启动线程Suspend()挂起线程GetDomain返回当前线程正在其中运行的当前域Interrupt中断处于WaitSleepJoin线程状态的线程ResetAbort取消为当前线程请求的Abort2、线程的生命周期在I/O操作期间线程被阻止线程已
7、创建但并未启动线程已启动I/O操作完成后运行线程被阻止,另一个操作正在进行提前中断或特地停止线程暂时中断的线程线程已恢复等待/休眠/加入已暂停正在运行已停止未开始已开始已阻止暂停发送I/O请求等待,休眠,加入开始I/O完成完成恢复5.3线程的建立与启动新建一个线程的过程:只需将其声明并为其提供线程起始点处的方法委托,再用Thread.Start()方法启动该线程(1)声明:Threada;(2)实例化a=newThread(newThreadStart(b));其中,b为新建过程中执行的过程名。(3)调用Thread.
8、Start()方法启动该线程a.Start();5.3线程的建立与启动usingSystem;usingSystem.Threading;publicclassA{publicvoidff()//线程启动时调用此方法{Console.WriteLine("A.ff()方法在另一个线程上运行!!");Thread.Sleep(300
此文档下载收益归作者所有