第六章异步与多线程编程.pptxVIP

  • 6
  • 0
  • 约1.13万字
  • 约 34页
  • 2016-12-03 发布于重庆
  • 举报
第六章异步与多线程编程

Newture.net课程系列新程教育C#高级编程.NET方向 第二学期课程第六章 异步与多线程编程本章目录异步编程进程与线程BeginInvoke和EndInvokeIAsyncResult接口和AsyncResult类异步编程的4种方法多线程编程Thread类使用线程池线程同步死锁引言平时我们会用到打印、下载等操作,这类型的操作比较费时,在程序中调用这类比较费时的代码时,调用方如果停在那里等待费时的代码执行完毕,无疑会严重影响程序的可操作性。现在很多应用程序将设置保存在配置文件中,那么当程序启动时由于需要加载配置,然后利用这些配置数据进行一系列的初始化操作,但因为I/O读取操作稍慢,这将导致程序的主窗体不能立刻显示,给用户一种启动过程十分漫长的感觉,用户体验不好。对于这类问题我们怎么去解决?这类问题,可以借助异步调用或者多线程编程模型轻松解决。引言如下是可能的解决方案:把整个初始化处理放进一个单独线程,主线程启动此线程后继续执行其他操作。例如窗体绘制操作,当初始化配置数据的进行还在执行的同时,主窗体也快速的展现在用户眼前。虽然当前主窗体可能还不能完全可用,但给用户一种程序飞快运行的感觉。配置信息初始化线程此刻也在同步执行,将配置文件中的数据读取到内存,并根据配置对当前程序进行初始化。这就是本章将要讨论的异步编程和多线程编程。进程与线程什么是进程?在启动一个应用程序后,系统将会给它分配一定的内存以及其他的一些资源,这些划定的内存以及资源的物理分隔叫做进程。在Windows系统中,可以通过“任务管理器”来查看当前运行的进程。可以看出,每个进程都包含一定数量的线程,例如360Tray.exe有53个线程。什么是线程?线程是系统分配处理器时间资源的基本单元,或者说是进程之内的独立执行的一个单元,对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。从另一个角度来说,线程是由进程创建的,由处理器使用的一个执行序列。进程与线程仔细观察“任务管理器”,会发现“应用程序”和“进程”分属两个不同的选项卡,这说明它们是不同的。一个应用程序可能包含一个或多个进程,每个进程都拥有自己独立的数据、执行代码以及系统资源。进程与线程理解进程和线程是进行异步编程的基础。我们之前使用的都是同步编程,什么是同步编程?同步编程指从第一条语句直到最后一条语句都是顺序执行。同步编程是有缺陷的,改进的方式,就是将同步编程改为异步编程,什么是异步编程?异步编程就是合理地利用多线程处理,从理论上讲,这些线程是“同时”执行的。BeginInvoke和EndInvokeclass Program { public delegate void PrintDelegate(string content); static void Main(string[] args) { PrintDelegate printDelegate = Program.Print; IAsyncResult result = printDelegate.BeginInvoke(hello world, null, null); printDelegate.EndInvoke(result); } public static void Print(string content) { Console.WriteLine(打印中……\n+content); System.Threading.Thread.Sleep(2000); } }在C#中使用线程的方法很多,使用委托的BeginInvoke和EndInvoke方法就是其中之一。BeginInvoke方法可以使用线程异步地执行委托所指向的方法。(委托所代理的目标方法只能为1个)然后通过EndInvoke方法获得方法的返回值(EndInvoke方法的返回值就是被调用方法的返回值),或是确定方法已经被成功调用。IAsyncResult接口和AsyncResult类public interface IAsyncResult {object AsyncState { get; }WaitHandle AsyncWaitHandle { get; }bool CompletedSynchronously { get; }bool IsCompleted { get; } }属性返回类型说明AsyncStateobject 返回一个对象,是启动异步操作的方法的最后一个参数AsyncWaitHandle WaitHandle 获取用于等待异步操作完成的WaitHandle CompletedSynchronously bool 获取一个值,指示异步操作是否同步完成IsCompleted bool 获取一个值,指示异步操作是否已完成IA

文档评论(0)

1亿VIP精品文档

相关文档