版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于WinForm医用仪器软件设计MedicalInstrumentSoftwareDesignQuickStartTutorial2022讲师xxx04WinForm程序设计章节目录Tableofcontents多线程实验委托和事件实验画图实验010203多线程实验Multithreadingexperiment实验内容该实验主要对比有无lock死锁对程序结果的影响。首先,新建一个控制台应用程序,在Program类中定义一个ticket()方法,用于显示剩余预约号不小于0时各个线程的调用情况(剩余预约号的初始值设为5)。在Main()方法中实例化Program类,新建4个线程,分别命名为“线程一”“线程二”“线程三”和“线程四”,线程入口都调用ticket()方法,然后打开线程,显示每个线程的调用情况。再新建一个控制台应用程序,代码同上,不同的是在ticket()方法中使用lock,来确保代码块完成运行。实验原理1、线程的定义--线程与进程进程是系统中资源分配和资源调度的基本单位。每个独立执行的程序称为一个进程,例如QQ就是一个进程。线程是进程中的基本执行单元,是操作系统分配CPU时间的基本单元。一个进程可以包含若干个线程,并且可以做到同时运行且互不干扰。Windows操作系统是多任务操作系统,以进程为单位,系统分配每个进程一段有限的使用CPU时间,这段时间内执行此进程,下个时间片段又调到另一个进程中去执行。线程则是进程中的执行流程,在进程得到CPU执行时间的同时,线程也同时得到程序执行的时间,这样一个进程就可以具有多个并发执行的线程。多线程实验Multithreadingexperiment实验原理2、多线程的优缺点优点:(1)多线程使程序的响应更快,在进行后台复杂计算的同时,也能使用户界面处于活跃状态;(2)多线程可以提高CPU的利用率,在处理耗时任务时可以定期将处理器时间让给其他任务;(3)多线程可以分别设置优先级优化性能。缺点:(1)线程也需要占用内存,线程越多,占用的内存就越多;(2)跟踪线程需要占用大量的CPU时间,线程过多,会使得线程的进度缓慢;(3)线程过多会导致控制复杂,造成很多程序缺陷;(4)线程之间对共享资源的访问会互相影响,解决不好会影响执行效果。多线程实验Multithreadingexperiment实验原理3、创建线程线程Thread类类位于System.Threading命名空间中,可用于创建并控制线程、设置线程优先级并控制其状态。使用Thread类创建线程时,只需要提供线程入口,告诉这个线程需要做什么,然后启动线程即可。线程的使用示例如下: Threadthread=newThread(newThreadStart(method));//创建Thread类的对象 thread.Start();//启动线程多线程实验Multithreadingexperiment类型线程名实例化构造函数,其参数是预定了Start方法的委托创建指向method方法的ThreadStart类型委托代码1分析4个线程公用一块代码,争抢共同资源A线程未执行完,B线程调用了,没有依次递减多线程实验Multithreadingexperiment实验原理4、使用lock关键字实现线程同步lock关键字用来确保代码块完整运行,不会被其他线程中断。lock语句语法格式如下: object
thisLock=newobject(); lock
(thisLock) {
//要运行的代码块 }lock语句的参数必须为基于引用类型的对象,该对象用来定义锁的范围。可以此参数看做一个标识,标识了多个线程共享的资源。关键字:lock多线程实验Multithreadingexperiment代码2分析多线程实验Multithreadingexperiment多线程实验Multithreadingexperiment1、常用属性Thread的常用属性与方法(补充)属性描述CurrentContext获取线程正在其中执行的当前上下文。CurrentCulture获取或设置当前线程的区域性。CurrentPrincipal获取或设置线程的当前负责人(对基于角色的安全性而言)。CurrentThread获取当前正在运行的线程。CurrentUICulture获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。ExecutionContext获取一个ExecutionContext对象,该对象包含有关当前线程的各种上下文的信息。IsAlive获取一个值,该值指示当前线程的执行状态。IsBackground获取或设置一个值,该值指示某个线程是否为后台线程。IsThreadPoolThread获取一个值,该值指示线程是否属于托管线程池。ManagedThreadId获取当前托管线程的唯一标识符。Name获取或设置线程的名称。Priority获取或设置一个值,该值指示线程的调度优先级。ThreadState获取一个值,该值包含当前线程的状态。多线程实验Multithreadingexperiment2、常用方法Thread的常用属性与方法(补充)方法名称说明Start()执行本线程。(不一定立即执行,只是标记为可以执行)Suspend()挂起当前线程,如果当前线程已属于挂起状态则此不起作用Resume()继续运行已挂起的线程。Interrupt()中断处于WaitSleepJoin线程状态的线程。Abort()终结线程Join()阻塞调用线程,直到某个线程终止。Sleep()把正在运行的线程挂起一段时间。GetDomain()返回当前线程正在其中运行的当前域。GetDomainId()返回当前线程正在其中运行的当前域Id。实验内容委托和事件实验Delegateandeventexperiment该实验主要通过委托实现参数在不同界面中传输的功能。项目包含两个界面:主界面和子界面。主界面显示当前的病人类型和“修改类型”按钮,单击按钮便进入子界面。子界面包含下拉列表和“确定”按钮,通过下拉列表可以选择“成人”“儿童”和“新生儿”中的任一病人类型,单击“确定”按钮后,选中的病人类型便显示在主界面中。实验原理1、委托的本质委托可以实现对方法的引用,其本质就是实现将方法当参数传递。2、声明委托的类型委托是类型安全的类,定义了返回类型和参数的类型,将要传递的方法的细节封装在委托中。声明委托类型的语法如下:delegatevoidsetTypeHandle(stringtype);
setTypeHandle的每个实例都可以包含一个方法的引用,该方法带有一个string类型的参数,返回值为void。委托关键字方法返回值委托类型方法参数委托和事件实验Delegateandeventexperiment实验原理3、事件事件基于委托,事件都是通过委托激活的。声明事件的代码如下:publiceventsetTypeHandlesendTypeEvent;触发委托事件的代码如下:sendTypeEvent(mType);还需要定义委托方法,并将委托方法添加到事件中。示例代码如下://定义委托方法privatevoidprocType(stringtype){[方法体]}//将委托方法添加到sendTypeEvent事件中sendTypeEvent+=newsetTypeHandle(procType);修饰符事件关键字委托类型事件名参数与委托类型的参数类型相同与委托类型的参数类型相同当运行到触发委托时间的代码①时,就会调用已添加到事件中的方法(②中的参数),即调用方法③,同时事件②中的参数会传递,作为方法③的参数①②③委托和事件实验Delegateandeventexperiment实验步骤界面设计:Form1控件:Label控件:Button事件:Click()委托和事件实验Delegateandeventexperiment实验步骤界面设计:Form2控件:Label控件:Button事件:Click()控件:ComboBox属性:添加Items集合事件:SelectedIndexChanged()窗体事件:Load()委托和事件实验Delegateandeventexperiment代码分析:Form1委托和事件实验Delegateandeventexperiment代码分析:Form2委托和事件实验Delegateandeventexperiment画图实验Drawingexperiment实验内容该实验主要实现在界面上连续画正弦波形。在数组中存储波形数据,通过定时器使用画笔画波形。实验原理1、GDI+概述GDI(GraphicsDeviceInterface),含义是图形设备接口,GDI+是以前版本GDI的继承者。使用GDI+可以将图形绘制在指定的模板中,并可以对图形的颜色、线条粗细和位置等进行设置。GDI+将程序设计和图形硬件分离开,使用时无需考虑特定显示设备的细节,使开发人员能够创建与设备无关的应用程序。画图实验Drawingexperiment实验原理2、Graphics绘图类Graphics类是GDI+的核心,用于创建图形图像的对象,提供了将对象绘制到显示设备的方法。创建Graphics对象有很多方法,通过窗口句柄创建Graphics对象示例如下: Graphicsgraphics=Graphics.FromHwnd(dataGridViewSin.Handle);该语句表示通过数据表格控件dataGridViewSin的句柄创建一个Graphics对象,表明将绘图内容与控件dataGridViewSin绑定。画图实验Drawingexperiment实验原理3、设置画刷并填充图形设置画刷用到Brush类,主要用于填充几何图形的颜色。Brush类:抽象基类,不能实例化。画刷对象需要使用从Brush类派生出的类。下面介绍使用Brush类派生出的SolidBrush类:
//创建画刷的语法:publicSolidBrush(Colorcolor)
Brushbr=newSolidBrush(Color.Black);//创建黑色画刷
graphics.FillRectangle(br,rect);//填充集合图形SolidBrush类定义单色画刷,用于填充图形形状;参数color表示此画刷的颜色;上方代码表示将rect长方形区域刷成画刷br对应的颜色(黑色)。画图实验Drawingexperiment实验原理4、设置画笔并绘制图形Pen类主要用于设置画笔,其构造函数语法如下:
publicPen(Colorcolor,flaotwidth)
例:PenmSinWavePen=newPen(Color.White,1);//创建白色,宽度为1的画笔C#中使用Graphics类来绘制几何图形,需要使用不同的方法实现不同图形的绘制。绘制直线方法DrawLine用法如下:
Graphics.DrawLine(Penpen,floatx1,floaty1,floatx2,floaty2)color设置画笔的颜色,width设置画笔的宽度三个参数表示使用pen画笔连接两点,第一个点的坐标为(x1,y1),第二个点的坐标为(x2,y2)画图实验Drawingexperiment实验原理5、Timer组件Timer组件即计时器组件,可以定期引发事件。启用:Enabled属性设为True时间间隔:Interval属性(以ms为单位)启用后每个时间间隔会引发一次Tick事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 昌都市教师招聘考试题库及答案
- 急诊科心肌梗死护理措施
- 心肺改善训练计划方案
- 结直肠炎疾病症状分析及护理方案
- 电梯维保主管职业晋升
- 结膜炎症状解析及眼部护理要点
- 配电室安全管理考核培训
- 放射科PET-CT检查术后护理措施
- 静脉配制肠外营养
- 工程风险应急方案
- 2026年滁州凤阳大明旅游发展(集团)有限公司招聘导游员(讲解员)15名笔试备考题库及答案详解
- T∕SZSSIA 019-2026 反恐怖防范管理规范 总则
- 药食同源食品管理办法实施细则
- 喷灌工程安全生产培训课件
- 中西医结合医院综合管理规范
- 2024统编版七年级历史下册期末总复习全册知识点提纲(按课梳理)
- 手术体位安全管理制度
- 保安员12个规范动作分解
- 部编版语文七八九年级读读写写六册合集
- JT-T-760-2009浮标技术条件
- 陕西省西安市长安区2023-2024学年八年级下学期期中数学试题(含答案)
评论
0/150
提交评论