用C#开发了四天的UWP应用有感
第一个就是异步方法,async-await,所谓async关键字,并没有什么实际上的语法意义,只是写在函数签名的位置让编译器方便进行查找以及静态检查,并且提醒程序员这是一个异步方法而已。至于await,这是一个运算符,作为一个语法糖,编译器在背后替你展开了所有的代码。略去了这部分细节,可以像写同步调用一样写异步调用。
await一个表达式,空值列会在执行到这个表达式时立即返回,同时这个表达式在另一条线程中继续执行,返回的控制流可以继续去处理其他的一些事情,比如UI的刷新和相应什么的,这样就不会在执行一个高耗时的操作时卡住整个界面。当异步操作结束后,控制流会从刚才返回的地方恢复上下文,然后从中断的地方进行后续的操作。
一个异步的调用返回一个Task,Task<T>,void,或者其他的IOperation什么的,表示一个正在进行的异步操作,await这个操作,不严谨的说就是让这个操作进行到出结果,然后得到的就是这个操作的结果,可能是void,也可能是一个返回值。
实际上await 异步方法就是await 异步方法的返回值,也就是暂时地退出当前调用异步方法的方法,干一些别的事前,然后在异步方法结束后再回来继刚才的事情,有这么一个比喻:你打电话叫了外卖,你不是一直站在门口等外卖小哥来,而是先去干些别的事情,等外卖小哥来了之后,你去拿外卖,然后继续你点外卖的目的:吃饭。
以上过程写成表达式就是
var 食物 = await 叫外卖(); 吃(食物);
在await叫外卖后,控制流返回,一般是回到消息循环或者事件循环里干别的事,然后外卖到了,吃,然后继续别的事情。
微软已经在C++的新提案中建议async-await关键字了,自己也已经在VS2015中进行了实现,我还没有试过C++的异步调用,下一个阶段的技术探索就是这个吧:多线程操作以及异步的后台实现。
第二个是数据绑定,总之实现方式就是在数据被修改的时候触发一个OnValueChanged回调,这个回调又触发一个事件,事件的处理函数(由编译器生成),修改与之绑定的控件的值,还有一个值得一提的是转换器,转换器的实现是通过实现一个接口IValueConverter,让编译器生成的代码能够把源数据用ValueConverter处理成目标数据,随后更新控件的值。没有Converter的时候相当于调用对象本身的ToString方法,把对象转成字符串,输出到界面上去(当然这是针对字符串的绑定)。
为什么只能在UI线程里面操纵UI呢,等我理解了多线程再说吧。
用C#开发了四天的UWP应用有感的更多相关文章
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)
http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- S5PV210开发系列四_uCGUI的移植
S5PV210开发系列四 uCGUI的移植 象棋小子 1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(三) Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了. 代码 4.3.4.1 Analyzer anal ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...
- Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(一) 既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索.搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此 ...
- 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo
原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl 后篇 --事件冒泡 系列文章链接: ASP.NET ...
随机推荐
- 电源相关知识—S0、S1(POS)、S2、S3(STR)、 S4、S5、睡眠、休眠、待机
转 http://blog.sina.com.cn/s/blog_52f28dde0100l3ci.html APM https://en.wikipedia.org/wiki/Advanced_Po ...
- hdoj 3501
Problem Description Given a positive integer N, your task is to calculate the sum of the positive in ...
- 解决cocopods不提示第三方库名字的方法
在使用第三方类库时,使用cocoaPods是非常方便的,具体使用方法可以参考:CocoaPods安装和使用教程 的安装使用方法.今天讨论的问题是,我在使用的时候遇到了一些问题:用cocoaPod si ...
- 优化ubuntu桌面
---恢复内容开始--- 此博主写的很全 http://blog.csdn.net/terence1212/article/details/52270210 使用安装Unity Tweak Tool ...
- 关于relative和absolute的总结
对于定位这个性质我原理上来说自己是明白的,但是在实践的过程中,总会出现各种稀奇古怪的情况,加relative或是absolute就可以解决,但是遇到这些情况总是不明白为什么!!!难道是脑容量太小的原因 ...
- node.js之windows下环境终极配置
大家都知道现在node.js相当流行,出门在外,如果都没听说过node.js,基本上算是out了,前段时间做一个项目,用到了实时通讯功能,当时用的就是node.js来做的,我有幸有研究了一番,别的不敢 ...
- Jquery和Javascript 实际项目中写法基础 (1)
一.JS 是什么,jquery 是什么 就不说明了,直接说一般使用是怎么样的 <!DOCTYPE html> <html> <head> <meta cha ...
- linux内核分析——扒开系统调用的三层皮
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验部分 选择2 ...
- High Precision Timers in iOS / OS X
High Precision Timers in iOS / OS X The note will cover the do's and dont's of using high precision ...
- php冒泡排序
<?php $arr = array(1,4,2,9,0,10,12,3,7); foreach($arr as $val) { echo $val."--"; } echo ...