网络与通信程序设计:11 委托事件与多线程_第1页
网络与通信程序设计:11 委托事件与多线程_第2页
网络与通信程序设计:11 委托事件与多线程_第3页
网络与通信程序设计:11 委托事件与多线程_第4页
网络与通信程序设计:11 委托事件与多线程_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章 C#高级编程MSDN中的高级编程指南.NET Framework 高级开发/zh-cn/library/29eafad8(v=vs.100).aspx观察程序设计模式:/zh-cn/library/ee850490(v=vs.100).aspx异步编程设计模式:/zh-cn/library/ms228969(v=vs.100).aspx使用线程和线程处理:/zh-cn/library/e1dx6b2h(v=vs.100).aspx引言: Windows GUI的消息机制第一节 委托与事件委托(delegate ) 委托委托是一种特殊的引用类型,是引用方法的类型。它将方法作为特殊的对象

2、封装起来,将方法作为变量或者参数进行传递。一旦委托分配(绑定)了方法,将与该方法具有完全相同的行为。可以理解:当需要将方法作为方法的参数时,就要考虑委托委托的特点委托类似于 C+ 函数指针,但它是类型安全的。委托允许将方法作为参数进行传递。委托可用于定义回调方法。委托可以链接在一起;可以对一个事件调用多个方法。方法不需要与委托签名(由返回类型和参数组成)精确匹配。事件(Event)“事件”是当对象发生某些事情时,向其他对象提供通知的一种方法。在C#中是通过delegate实现的。事件有两个角色:事件发送方,指触发事件的对象事件接收方,指注册想在某种事件发生时被通知的对象委托与事件(Observ

3、er观察程序设计模式)发布者委托订阅者订阅者订阅者订阅者.Net Framework中的委托与事件EventHandler委托类型public delegate void EventHandler(object sender, EventArgs e);this.button1.Click += new System.EventHandler(this.button1_Click);/见Designer.cs文件.Net Framework的编码规范:委托类型的名称都应该以EventHandler结束委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 Eve

4、ntArgs类型(或继承自EventArgs)事件的命名为委托去掉 EventHandler之后剩余的部分继承自EventArgs的类型应该以EventArgs结尾第二节 异步编程模式同步与异步编程涉及的问题同步与异步同步(Synchronous)和异步(Asynchronous)的概念来自通信领域同步调用与异步调用同步调用,发出一个功能调用时,没有得到结果之前,该调用不返回。异步调用,发出功能调用后,调用者不能立刻得到结果,但会立即从被调用者返回。阻塞调用与非阻塞调用*阻塞调用,调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。非阻塞调用,在不能立刻得到结果之前,函数不会阻

5、塞当前线程,而会立刻返回。异步操作异步操作异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。.NET Framework 对异步编程功能的支持: 文件 IO、流 IO、套接字 IO。网络。远程处理信道(HTTP、TCP)和代理。使用 ASP.NET 创建的 XML Web services。ASP.NET Web 窗体。使用 MessageQueue 类的消息队列。异步编程实现使用 IAsyncResult 调用异步方法 使用委托进行异步编程 使用基于事件的异步模式进行多线程编程请参考:/zh-cn/library/

6、ms228969(v=vs.90).aspx第三节 多线程编程进程与线程进程:进程是正在运行的程序实例,是系统调度和资源分配的独立单位系统进程、用户进程线程:线程是程序中的执行流,是程序执行的最小处理单位在单个程序中同时运行多个线程完成不同的工作,称为多线程特点多个进程的内部数据和状态都是完全独立的,而多线程共享一块内存空间和一组系统资源,有可能互相影响线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换负担要小线程的运行环境线程的生命状态与周期关于多线程的一些思考多线程可以帮助程序更充分地利用时间片,而多核CPU和多核系统的出现,更突显了这一优势但多线程

7、程序也会导致CPU频繁的切换线程,同时也带来线程同步、线程安全等问题新的软硬件架构会在内部进行一些优化,提高软件硬件的工作效率并行设计.NET Framework 4 引入新的编程模型,支持并行工作Parallel和PLINQ并行设计模式并行循环模式并行任务模式并行合并模式Future模式动态任务并行模式流水线模式C#中的多线程线程类 ThreadSystem.Threading.Thread:/zh-cn/library/system.threading.thread.aspx线程操作创建线程,启动线程,休眠线程,挂起线程,继续线程,终止线程线程的常用属性与方法属性名描 述CurrentTh

8、read只读属性,获取当前正在运行的线程IsAlive判断线程是否处于活动状态IsBackground获取或设置一个值,该值指示某个线程是否为后台线程IsThreadPoolThread获取一个值,该值指示线程是否属于托管线程池Name获取或设置线程的名称PriorityThreadPriority枚举类型,代表线程的优先级,如:Normal、AboveNormal、BelowNormal、Highest、LowestThreadStateThreadState枚举类型,代表当前线程的状态,如:Unstarted、Running、WaitSleepJoin、Stopped、AbortReque

9、sted、Suspended、Aborted等方法名描 述Start()启动线程的执行Suspend()挂起线程,或者如果线程已挂起,则不起作用Resume()继续已挂起的线程Interrupt()终止处于Wait或者Sleep或者Join线程状态的线程Join()阻塞调用线程,直到某个线程终止时为止Sleep()将当前线程阻塞指定的毫秒数Abort()终止一个线程的运行。如果线程已经终止,则不能通过Thread.Start()来启动线程体验多线程及线程异常(编程实例)Thread thread=new Thread(new ThreadStart(dosth);thread.Start();

10、thread.Join(2000);/暂停2000毫秒thread.Interrupt();thread. Suspend();thread. Resume();thread.Abort();线程同步与线程锁死锁和争用条件多线程异步执行,可以解决响应性和多任务的问题,但同时引入了资源共享和同步问题。主要表现为:死锁和争用条件。/zh-cn/library/1c9txz50.aspx同步机制和同步线程lock、Monitor、Mutex等使用Lock和Monitor使用Locklock (x) DoSomething();等效MonitorSystem.Object obj = (System.

11、Object)x; System.Threading.Monitor.Enter(obj); try DoSomething(); finally System.Threading.Monitor.Exit(obj); 窗体控件的线程安全调用。Invoke、 BeginInvoke调用委托Invoke是同步方法,一直等待至更新任务完成,阻塞调用线程BeginInvoke是异步方法,封装完成后马上返回,不等待执行结果,不阻塞调用线程;可以使用EndInvoke方法等待异步操作的完成使用BackgroundWorker特点用来执行多线程任务,允许在一个单独的线程上执行一些操作。DoWork 事件方法中不能操作任何用户界面对象;应该通过 ProgressChanged 和RunWorkerComplet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论