用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 ...
随机推荐
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- hdoj 4323
题意:给你n个数,m个查询,查询中包括一个数和一个最大编辑距离d,问n个数中和这个数的编辑距离不超过d的有多少个 编辑距离:http://baike.baidu.com/view/2020247.ht ...
- 史上最全的RunLoop介绍
之前有人在后台给小编留言,说:小编啥时候给我们分享RunLoop的一些文章,工作以后特别需要这样的技术.这不,小编从网上找了一个介绍非常详细,清晰的文章,仅供参考. RunLoop 是 iOS 和 O ...
- 斯诺登称NSA攻破互联网加密技术
据财新网报道,本已渐渐平静的斯诺登泄密事件在9月6日再掀波澜.英国<卫报>.美国<纽约时报>和美国非盈利调查新闻机构ProPublica联合报道称,根据斯诺登提供的大量文件,美 ...
- java内存泄露的理解与解决(转)
Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...
- ubuntu 14.04 下找不到命令,路径出错
在安装一些东西时,可能操作上不小心把路径覆盖或打错,造成一些基本命令如ls mkdir等无法使用,就会出现以下提示错误. 错误: 由于/usr/bin 不在PATH 环境变量中,故无法找到该命令 根本 ...
- Hadoop 2.2.0学习笔记20131209
1.下载java 7并安装 [root@server- ~]# rpm -ivh jdk-7u40-linux-x64.rpm Preparing... ####################### ...
- cassandra 环境搭建
1 下载安装包 http://www.planetcassandra.org/cassandra/?dlink=http://downloads.datastax.com/community/dsc- ...
- 动手实现自己的 STL 容器 《1》---- vector
本文参考了侯捷的 <STL 源码分析>一书,出于兴趣,自行实现了简单的 vector 容器. 之后会陆续上传 list, deque 等容器的代码,若有错误,欢迎留言指出. vector ...
- Unity3D之实现背景的无限重复生成
在制作flappyBird这个小游戏中(摄像机为Orthographic),为了无限重复生成背景,可以先做好三个背景(我做的有点小),在Gamecontroller上挂一个脚本,如下: pu ...