第一个就是异步方法,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. Teach Yourself Programming in Ten Years

    Teach Yourself Programming in Ten Years——用十年教会自己编程 作者:Peter Norvig 译者:刘海粟 本文原文为:http://norvig.com/21 ...

  2. shell使用随笔

    001 对文件某一列求和 awk '{sum += $collum};END {print sum}' /path/to/your/file 2 3 3 5 假设文件内容如上所示: # awk '{s ...

  3. PHP 面向对象编程(2)

    一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...

  4. Spring 整合 Struts2

    1. Spring 如何在 WEB 应用中使用 ? 1). 需要额外加入的 jar 包: spring-web-4.0.0.RELEASE.jar spring-webmvc-4.0.0.RELEAS ...

  5. Struts2中实现Web项目的初始化工作

    Struts2中实现Web项目的初始化工作 注:通常web系统在启动时需要做一些初始化的工作,比如初始化系统全局变量,加载自定义配置文件,启动定时任务等.  一.在Struts中实现系统的初始化工作 ...

  6. AdaBoosting 3

    在学习AdaBoosting和online Boosting, 最好有bagging和boosting基础,这样看起来比较会比较顺.有空再补上. AdaBoost 算法的主要思想之一就是在训练集上维护 ...

  7. 2014年3月份第3周51Aspx源码发布详情

    WPF翻书效果源码  2014-3-17 [VS2010]源码描述:WPF翻书效果源码:多点触控的一个Demo,利用鼠标可以实现图书翻页效果:适合新手学习研究. TL简单家具网新手源码  2014-3 ...

  8. Volley框架的使用

    所谓Volley,它是2013年Google I/O上发布的一款网络框架,基于Android平台,能使网络通信更快,更简单,更健全. 它的优点:(1)默认Android2.3及以上基于HttpURLC ...

  9. js 中混乱this

    1.在HTML元素事件属性中inline方式使用this关键字:  <div onclick=" // 可以在里面使用this ">division element&l ...

  10. python分割字符串split,filter函数用法

    现有字符串,需要取出用空格分隔的第一段,操作如下 >>> product_model = ‘WS-C2960G-24TC-L – Fixed Module 0′>>> ...