- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
走进异步编程的世界-在WinForm中执行异步操作
走进异步编程的世界 -?在 WinForm 中执行异步操作
序
? 这是继《开始接触 async/await 异步编程》、《走进异步编程的世界 - 剖析异步方法》后的第三篇。主要介绍在 WinForm 中如何执行异步操作。
?
目录
? 在 WinForm 中执行异步操作
? 在 WinForm 中使用异步 Lambda 表达式
? 一个完整的 WinForm 程序
? 另一种异步方式 - BackgroundWorker 类?
一、在 WinForm 程序中执行异步操作
下面通过窗体示例演示以下操作-点击按钮后:
①将按钮禁用,并将标签内容改成:“Doing”(表示执行中);
②线程挂起3秒(模拟耗时操作);
③启用按钮,将标签内容改为:“Complete”(表示执行完成)。
1 public partial class Form1 : Form
2 {
3 public Form1()
4 {
5 InitializeComponent();
6 }
7
8 private void btnDo_Click(object sender, EventArgs e)
9 {
10 btnDo.Enabled = false;
11 lblText.Text = @Doing;
12
13 Thread.Sleep(3000);
14
15 btnDo.Enabled = true;
16 lblText.Text = @Complete;
17 }
18 }
可是执行结果却是:
图1-1
?
【发现的问题】
①好像没有变成“Doing”?
②并且拖动窗口的时候卡住不动了?
③3秒后突然变到想拖动到的位置?
④同时文本变成“Complete”?
?
【分析】GUI 程序在设计中要求所有的显示变化都必须在主 GUI 线程中完成,如点击事件和移动窗体。Windows?程序时通过 消息来实现,消息放入消息泵管理的消息队列中。点击按钮时,按钮的Click消息放入消息队列。消息泵从队列中移除该消息,并开始处理点击事件的代码,即?btnDo_Click 事件的代码。
btnDo_Click 事件会将触发行为的消息放入队列,但在?btnDo_Click 时间处理程序完全退出前(线程挂起 3 秒退出前),消息都无法执行。(3 秒后)接着所有行为都发生了,但速度太快肉眼无法分辨才没有发现标签改成“Doing”。
图1-2 点击事件
图1-3 点击事件具体执行过程
现在我们加入 async/await 特性。
1 public partial class Form1 : Form
2 {
3 public Form1()
4 {
5 InitializeComponent();
6 }
7
8 private async void btnDo_Click(object sender, EventArgs e)
9 {
10 btnDo.Enabled = false;
11 lblText.Text = @Doing;
12
13 await Task.Delay(3000);
14
15 btnDo.Enabled = true;
16 lblText.Text = @Complete;
17 }
18 }
图1-4
现在,就是原先希望看到的效果。
【分析】btnDo_Click 事件处理程序先将前两条消息压入队列,然后将自己从处理器移出,在3秒后(等待空闲任务完成后 Task.Delay )再将自己压入队列。这样可以保持响应,并保证所有的消息可以在线程挂起的时间内被处理。
?
?1.1 Task.Yield
Task.Yield 方法创建一个立刻返回的 awaitable。等待一个Yield可以让异步方法在执行后续部分的同时返回到调用方法。可以将其理解为 离开当前消息队列,回到队列末尾,让 CPU 有时间处理其它任务。
1 class Program
2
您可能关注的文档
- 设备与主材-划分.doc
- 设备应急响应制度.docx
- 设备异常管理规定.doc
- 论语选读共6课时.doc
- 设备使用和维护保养管理程序.doc
- 设备振动故障在线检测技术案例分析.doc
- 设计勘察阶段的工程项目管理.doc
- 论青少年身体健康.doc
- 设计心理学认知与学习.doc
- 设置endnote参考文献的三种方法.docx
- GB/T 39560.10-2024电子电气产品中某些物质的测定 第10部分:气相色谱-质谱法(GC-MS)测定聚合物和电子件中的多环芳烃(PAHs).pdf
- 中国国家标准 GB/T 39560.10-2024电子电气产品中某些物质的测定 第10部分:气相色谱-质谱法(GC-MS)测定聚合物和电子件中的多环芳烃(PAHs).pdf
- 《GB/T 39560.10-2024电子电气产品中某些物质的测定 第10部分:气相色谱-质谱法(GC-MS)测定聚合物和电子件中的多环芳烃(PAHs)》.pdf
- GB/T 39560.302-2024电子电气产品中某些物质的测定 第3-2部分:燃烧-离子色谱法(C-IC)筛选聚合物和电子件中的氟、氯和溴.pdf
- 中国国家标准 GB/T 39560.2-2024电子电气产品中某些物质的测定 第2部分:拆解、拆分和机械制样.pdf
- 中国国家标准 GB/T 39560.302-2024电子电气产品中某些物质的测定 第3-2部分:燃烧-离子色谱法(C-IC)筛选聚合物和电子件中的氟、氯和溴.pdf
- GB/T 39560.2-2024电子电气产品中某些物质的测定 第2部分:拆解、拆分和机械制样.pdf
- 《GB/T 39560.2-2024电子电气产品中某些物质的测定 第2部分:拆解、拆分和机械制样》.pdf
- 《GB/T 39560.303-2024电子电气产品中某些物质的测定 第3-3部分:配有热裂解/热脱附的气相色谱-质谱法(Py/TD-GC-MS)筛选聚合物中的多溴联苯、多溴二苯醚和邻苯二甲酸酯》.pdf
- 中国国家标准 GB/T 39560.303-2024电子电气产品中某些物质的测定 第3-3部分:配有热裂解/热脱附的气相色谱-质谱法(Py/TD-GC-MS)筛选聚合物中的多溴联苯、多溴二苯醚和邻苯二甲酸酯.pdf
最近下载
- 颅内和椎管内血管性疾病(1)电子教案.ppt
- 北京市人民大附属中学2022-2023学年物理九年级第一学期期中监测模拟试题(含解析).doc
- 必威体育精装版版ISO9001&14001&45001三体系管理手册.doc
- 用户手册-和仁SMART-HIS医院信息系统软件.docx
- 《会展策划主题》-公开·课件设计.ppt
- xx银行培训:运营条线-柜面业务督导检查方法.pptx
- 《医疗机构投诉管理办法》考核试题及答案.docx
- 2015版ISO9001&ISO14001&ISO45001三体系管理手册及程序文件一整套.doc
- 建筑模型设计与制作.ppt
- 2024届中考语文第一轮专题复习——病句的辨析与修改 教学PPT课件.pptx
文档评论(0)