(精品)第2章 C#网络编程常用特性

上传人:沈*** 文档编号:246722906 上传时间:2024-10-15 格式:PPT 页数:19 大小:2.67MB
返回 下载 相关 举报
(精品)第2章 C#网络编程常用特性_第1页
第1页 / 共19页
(精品)第2章 C#网络编程常用特性_第2页
第2页 / 共19页
(精品)第2章 C#网络编程常用特性_第3页
第3页 / 共19页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,2,章,C#,网络编程常用特性,2.1,C#,委托机制,2.2 C#,多线程,2.3 C#,方法,回调,2.3C#,方法回调,2.1.1,初识委托,定义委托使用关键字,delegate,:,delegate void SomeDelegate(type1 para1,type2 para2,typen paran);,声明委托:,SomeDelegate d;,接着实例化:,d=new SomeDelegate(obj.InstanceMethod);,然后用作某方法的参数:,someMethod(d);,最后在此方法的实现代码中使用:,private void someMethod(SomeDelegate someDelegate),/,使用委托,someDelegate(arg1,arg2,argn);,2.1.1,初识委托,方法,InstanceMethod,的定义:,private void InstanceMethod(type1 para1,type2 para2,typen paran),/,方法体,2.1.2,为什么要使用委托,这里先给出一个“文字抄写员”小程序,界面如下:,2.1.2,为什么要使用委托,【,例,2-1】,ProcessMethodCall,定义两个方法,writeTextBox1(),和,writeTextBox2(),分别用于向文本区和文本区中写入文字,然后在,【,提交,】,按钮的事件过程中直接调用这两个方法,实现程序书写的功能。在书写文本时,每写入一个字,都使用,while,语句间歇延时,1,秒钟以便更加形象地展示程序的运行过程。程序运行效果如图,2.2,所示。,2.1.2,为什么要使用委托,【,例,2-2】,ProcessDelegate,对比之前使用传统方法调用的程序版本,大家会发现,应用委托后只要定义一段方法代码(如下),就可以实现与原来程序一样的功能。,private void WriTxt(WriteTextBox wMethod),string strdata=textBox3.Text;,for(int i=0;i DateTime.Now),2.1.2,为什么要使用委托,使用委托改写的程序与原程序的功能和运行效果完全一样,如图,2.3,所示。,2.1.3,委托的意义,委托是一个,特殊的类,,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用,if-else(Switch),语句,同时也使得程序具有更好的扩展性。,2.2C#,多线程,2.2.1,线程概述,一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。线程上下文包括为使线程在其宿主进程地址空间中无缝地继续执行所需的所有信息,包括线程的,CPU,寄存器组和堆栈。每个应用程序域都是用单个线程启动的,但该应用程序域中的代码可以创建附加应用程序域和附加线程。,必须认识到线程本身可能存在影响系统性能的不利方面,才能正确使用线程。不利方面主要有:,(1),线程也是程序,所以线程需要占用内存,线程越多占用内存也越多。,(2),多线程需要协调和管理,所以需要占用,CPU,时间来跟踪线程。,(3),线程之间对共享资源的访问会相互影响,必须解决争用共享资源的问题。,(4),线程太多会导致控制太复杂,最终可能造成很多,Bug,。,2.2.1,线程概述,例如在,VS2008,中新建一个,Windows,窗体应用程序,打开解决方案资源管理器树形目录下的“,Program.cs,”文件,其代码如下。,static class Program,/,/,应用程序的主入口点。,/,STAThread,static void Main(),Application.EnableVisualStyles();,Application.SetCompatibleTextRenderingDefault(false);,Application.Run(new Form1();,2.2.2,线程的创建,通过实例化一个,Thread,对象就可以创建一个线程。创建新的,Thread,对象时,将创建新的托管线程。,Thread,类接收一个,ThreadStart,委托或,ParameterizedThreadStart,委托的构造函数,该委托包装了调用,Start,方法时由新线程调用的方法,示例代码如下。,Thread thread=new Thread(new ThreadStart(method);/,创建线程,thread.Start();/,启动线程,上述代码实例化了一个,Thread,对象,并指明将要调用的方法,method(),,然后启动线程。,ThreadStart,委托中作为参数的方法不需要参数,并且没有返回值。,ParameterizedThreadStart,委托一个对象为参数,利用这个参数可以很方便地向线程传递参数,示例代码如下。,Thread thread=new Thread(new ParameterizedThreadStart(method);/,创建线程,thread.Start(3);/,启动线程并传参数,3,2.2.3,线程支持的实时,GUI,电脑软件早已是图形用户界面(,GUI,)时代,一个软件的好坏很大程度上依赖于最终用户的主观使用体验,而影响用户体验的一个至关重要的因素就是界面的交互性和响应速度。,【,例,2-3】,SingleThread,本例与前面,【,例,2-1】,不同之处在于:将原来,【,提交,】,按钮的过程代码移植到方法,DoTsk(),中,而在单击按钮时执行的是一段启动线程的代码,如下。,ThreadStart doTask=new ThreadStart(DoTsk);,Thread tskThread=new Thread(doTask);,tskThread.Start();,2.2.3,线程支持的实时,GUI,下面将本例与之前的,【,例,2-1】,程序放在一起运行,比较一下效果,如图,2.5,所示。,2.2.3,线程支持的实时,GUI,【,例,2-3】,单线程程序是用传统的方法调用方式实现的,也可以改用委托方式,代码如下。,【,例,2-4】,ThreadDelegate,2.2.4,线程支持的并发任务,下面实现一个“文字抄写员”程序的多线程版本。,【,例,2-5】,MultiThread,只要同时启动这两个线程,就可以向两个文本区同时写入文本。程序运行效果如图,2.6,所示。,2.3C#,方法回调,在,【,例,2-3】,、,【,例,2-4】,和,【,例,2-5】,的代码中都有这样一条奇怪的语句:,CheckForIllegalCrossThreadCalls=false;/,允许跨线程调用,如果我们将这条语句注释掉,重新编译后,运行程序时会发生错误,如图,2.7,所示。,2.3.1,回调实现的一般过程,C#,的方法回调机制,也是建立在委托基础上的,下面给出它的典型实现过程。,(,1,)定义、声明回调:,delegate void DoSomeCallBack(type para);,DoSomeCallBack doSomeCallBack;,(,2,)初始化回调方法:,doSomeCallBack=new DoSomeCallBack(DoSomeMethod);,(,3,)触发对象动作:,Opt obj.Invoke(doSomeCallBack,arg);,2.3.1,回调实现的一般过程,最终作用于对象,Opt obj,的代码是置于回调方法体,DoSomeMethod(),中的:,private void DoSomeMethod(type para),/,方法体,Opt obj.someMethod(para);,2.3.2,方法回调与委托、线程的综合应用,【,例,2-6】ThreadCallback,最后来运行一下,【,例,2-6】,的程序,如图,2.8,所示。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!