WinRT异步机制的诞生背景

当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应。流畅的操作感变的十分重要。

在连接外部程序接口获取数据,操作本地数据等任务时,如果构建方式错误,应用程序会将大量的时间花费等待外部环境上,从而无法保证足够的时间来响应用户的需求。

之前公司的项目需要在Win7系统下编写触控应用程序,不管同事们如何努力的优化着代码,都不能使操作体验达到需求的要求。究其原因,Win7与.NET Framework不是为触控而设计,在进行某些I/O操作时,系统内部降低的UI操作的优先级。

很高兴的是,微软适时的推出了WinRT,配合Win8,操作感为之提升,至少不逊于Ios了。

为解决执行操作等待的环境问题,是微软着手设计WinRT API的核心原则,其提供的API能保证触控程序流畅运行的重要性不言而喻(为了Surface,大家懂得)。

WinRT的内部机制

WinRT对内部许多可能受输入/输出限制的 API 进行了异步化处理。如果执行时间超过50毫秒,那怕是同步编码,也会进行异步化处理。

MS .Net Framework 4.5中增加了Task类,async/await关键字后,通过新机制可以让项目中异步操作变得十分简单。

下面我们就来深入了解下这些新东西。

async/await示例

项目中最简单的一个调用函数,该函数执行获取某个特定文件夹的所有文件,即使在读取阶段,程序任然能够保持十分流畅的UI操作感。

         async private void GetFile()
{
var files = await KnownFolders.PicturesLibrary.GetFilesAsync();
this.DataContext = files;
}

“this.DataContext = files;”在GetFilesAsync执行完成后再被执行,通过async/await,异步调用之后的代码将在于原始调用相同的上下文进行回拨。

可以将操作结果通知UI更新,而无需担心返回到UI线程。

那么WinRT是怎么实现异步操作,它的异步基元的原理又是什么?

WinRT异步编程五大核心接口

IAsyncInfo、IAsyncAction、IAsyncActionWithProgress、IAsyncOperation 和IAsyncOperationWithProgress。

WinRT 异步模型的核心接口依托于 IAsyncInfo 而构建。该接口可以定义异步操作(例如,当前状态、取消操作的功能和失败操作的错误等)的属性。

MSDN:

从IAsyncInfo的描述中所知,异步操作可以返回结果和在运行时汇报进度,结合后面四种接口可以定义不同的组合。下面引用MSDN上的一张经典图片:

上图用表格形式明了的表述了各个接口的用途。

本文的用例代码实现:

1.IAsyncOperation的三种状态示例:Canceled、Completed 和 Error,异步操作状态Status;

2.实现IAsyncActionWithProgress汇报进度;

3.实现IAsyncOperationWithProgress汇报进度;

代码就不贴了,示例代码讲的比较清楚,如有需要请自行下载:

请继续关注Windows store app[Part 4]:深入WinRT的异步机制

Windows store app[Part 3]:认识WinRT的异步机制的更多相关文章

  1. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  2. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  3. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  4. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

  5. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  6. 01、Windows Store APP 设置页面横竖屏的方法

    在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...

  7. Windows store app Settings 的 应用 ( viewmodel + windows.storage)

    1.在首页 加入 一个元素(加下滑线的).此元素绑定了两个属性 <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  8. windows store app 如何计算字符所占的宽度

    最近在做一个PDF电子文档相关的项目,我们的app是运行在Windows 8 / WinRT 下的.由于使用的第三方库的一些技术限制,text area竟然不支持多行文本自动换行.于是我们就需要自己实 ...

  9. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

随机推荐

  1. 手把手教你使用node-inspector调试nodejs

    最近再看nodejs,这个东西是运行在服务端的,也就是说我们在客户端看不到相应的js代码,那么怎么调试了?目前主流的方法有三种.第一是采用node-inspector.第二种采用nodejs内置的调试 ...

  2. 4、数据类型二:Lists

    1.关于list的组织形式 列表数据类型(Lists)可以存储一个有序的字符串列表,常用的操作时向列表两段添加元素,或者获取列表的某一个片段.列表类型的底层实现是一个双向链表(double linke ...

  3. leetcode384

    public class Solution { private int[] nums; private Random random; public Solution(int[] nums) { thi ...

  4. 用Python将word文件转换成html(转)

    用Python将word文件转换成html   序 最近公司一个客户大大购买了一堆医疗健康方面的科普文章,希望能放到我们正在开发的健康档案管理软件上.客户大大说,要智能推送!要掌握节奏!要深度学习!要 ...

  5. python十个博客

    1.首先第一个肯定是毋庸置疑的Planet Python这是最出名的python博客其中之一,快去看看,我希望你能找到对你有用的东西,昨天它还更新了呢! 2.第二个博客是lucumr,博主是flask ...

  6. Shiro学习之路 -- 架构及其组件

    出自:跟我学shiro 简介 Apache Shiro 是 Java 的一个安全框架.目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 ...

  7. Halcon标定

    摄像头拍摄时候,图像均有畸变,但是图像的扭曲变形均是有规律的成线性的,所以可以通过算法矫正.halcon标定过程需要在镜头内放置标定板:标定板一般选用30*30mm的:可以通过halcon程序来制作: ...

  8. Synchronized块同步变量的误区

    我们可以通过synchronized块来同步特定的静态或非静态方法.要想实现这种需求必须为这些特性的方法定义一个类变量,然后将这些方法的代码用synchronized块括起来,并将这个类变量作为参数传 ...

  9. java反射(Field的应用)

    //$Id: DirectPropertyAccessor.java 11405 2007-04-15 12:50:34Z max.andersen@jboss.com $ package org.h ...

  10. securecrt免密码登录

    一.前言 1. 环境 客户端系统:win7 securecrt版本:6.0.2 服务端系统:centos6.5 服务端ssh实现:openssh 2. 关于认证方式 我们知道ssh一般都会提供多种客户 ...