Windows 简介
窗体程序特点
消息驱动的可视化界面,支持鼠标键盘,实时响应。
窗体程序运行特点:
- 通信
- 状态切换
- 实时输入
- 任务并发
- 实时响应
窗体程序与消息机制
VS使用C++语言建立MFC窗体程序
VS使用C#语言建立WinForm窗体程序
VB/Delphi可以建立自己的窗体程序
窗体程序的输入与输出
输入:消息队列 + 消息循环
Windows能够为每个窗体应用程序维护一个消息队列。应用程序必须从消息队列中获取消息,然后分派给某个窗口。
输出:刷新显示
窗体中的线程与资源
窗体线程与工作线程
窗体程序
一个主线程,也叫界面线程,所的控件属于这个线程
工作线程
线程—任务时间长,实质性要求
窗体—接收用户响应,不做实质工作
用户应将程序任务进行划分,主窗体线程负责用户的输入与结果的显示,需要消耗较多运算时间而又没有用户交互的任务应当指派给工作线程来完成,窗体线程与工作线程并发执行。机器执行工作任务的同时,窗体以异步方式响应用户的输入,也可异步对结果显示,程序的响应性可用性较高。应用程序在运行时根据执行逻辑,由主窗体线程创建工作线程,工作线程以后台方式运行不直接与用户发生交互,在创建时工作线程默认是没有消息队列循环机制的。
工作线程完成一些比较耗时的任务,只有少量的同步控制,网络程序必须使用工作线程来处理时间上不可预测的任务
工作线程不能引用窗体控件
所有的窗体控件是属于窗体线程的,窗体线程负责接收用户输入,更新显示信息到窗体上。
工作线程不允许使用窗体控件其属性和方法。
实现数据的线程安全,避免访问冲突。
各种回调函数也可看作工作线程
窗体自定义消息处理
用户应将程序任务进行划分,主窗体线程负责用户的输入与结果的显示,需要消耗较多运算时间而又没有用户交互的任务应当指派给工作线程来完成,窗体线程与工作线程并发执行。
机器执行工作任务的同时,窗体以异步方式响应用户的输入,也可异步对结果显示,程序的响应性可用性较高。
应用程序在运行时根据执行逻辑,由主窗体线程创建工作线程,工作线程以后台方式运行不直接与用户发生交互,在创建时工作线程默认是没有消息队列循环机制的
窗体事件机制
事件介绍
对象调用方法,可由其它对象方法来实现 允许一个对象的某个行为可以有多个独立的方法执行 多路广播委托实现事件机制
函数指针
代码段的入口地址
将函数作为参数或变量使用
委托
它是一个引用类型,内容是方法名称,规定了参数列表
参照C\C++语言的函数指针
委托保证安全,避免越界与地址无效
委托的基类是System.Delegate
System.Delegate类是抽象类,不能直接实例化
系统和编译器可以显式地从 Delegate 类或MulticastDelegate 类派生,用户是不允许由委托类 进行派生新类的。
委托是异步(回调)操作和事件处理的重要环节
回调是由系统执行循环函数
事件是被系统封装的函数指针