第一个就是异步方法,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应用有感的更多相关文章

  1. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  2. S5PV210开发系列四_uCGUI的移植

    S5PV210开发系列四 uCGUI的移植 象棋小子          1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...

  3. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  4. Lucene.Net 2.3.1开发介绍 —— 四、搜索(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(三) Lucene有表达式就有运算符,而运算符使用起来确实很方便,但另外一个问题来了. 代码 4.3.4.1 Analyzer anal ...

  5. Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...

  6. Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(一) 既然是内容筛选,或者说是搜索引擎,有索引,必然要有搜索.搜索虽然与索引有关,那也只是与索引后的文件有关,和索引的程序是无关的,因此 ...

  7. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  8. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...

  9. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl  后篇 --事件冒泡 系列文章链接: ASP.NET ...

随机推荐

  1. mac os 中类似于Linux的yum工具,或ubuntu的apt-get工具Homebrew

    Linux下的yum用着真省心! mac下的相类似的软件是Homebrew 使用前需要先安装它, ruby -e "$(curl -fsSL https://raw.githubuserco ...

  2. apache认证、授权、访问控制

    认证对象:某一个网站目录. 启用认证 1.即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效:AllowOverride AuthConfig 2.设置密码登录访问某个站点或 ...

  3. NPOI 操作Excel

    关于NPOI NPOI是POI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex. ...

  4. 后台返回JSON关于日期的格式化

    JSONObject 可以将java对象转换成json格式,用于处理ajax请求或者做app是与前台的交互. 但是Date类型的也会做转换,很多时候我们是不想将日期的年月日分别转换成json的.可以通 ...

  5. 动手实现自己的 STL 容器 《1》---- vector

    本文参考了侯捷的 <STL 源码分析>一书,出于兴趣,自行实现了简单的 vector 容器. 之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出. vector ...

  6. Qt + FFmpeg 本地音频播放器

    http://pan.baidu.com/s/1hqoYXrI

  7. webApp--cordova 系列1

    1.在node,npm 可用的前提下 npm install -g cordova 大约10分钟后装完,cmd中输入cordova -v  验证是否安装成功 2.cordova项目打包是用ant完成, ...

  8. SQL SERVER 2008配置Database Mail –用SQL 数据库发邮件

    SQL SERVER 2008配置Database Mail –用SQL  数据库发邮件 https://blogs.msdn.microsoft.com/apgcdsd/2011/06/28/sql ...

  9. js 网站顶部通用导航

    js代码: (function (scriptId, styleVersion) { var hotgameData = { 'title': '热门游戏', 'list': [ {'text': ' ...

  10. spring-websocket的搭建

    Apach Tomcat 8.0.3+MyEclipse+maven+JDK1.7 spring4.0以后加入了对websocket技术的支持,撸主目前的项目用的是SSM(springMVC+spri ...