Windows store app[Part 3]:认识WinRT的异步机制

WinRT异步机制的诞生背景git

当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,咱们但愿全部的交互过程均可以作出快速的反应。流畅的操做感变的十分重要。github

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

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

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

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

WinRT的内部机制async

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

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

下面咱们就来深刻了解下这些新东西。优化

async/await示例

项目中最简单的一个调用函数,该函数执行获取某个特定文件夹的全部文件,即便在读取阶段,程序任然可以保持十分流畅的UI操做感。

1         async private void GetFile()
2         {
3             var files = await KnownFolders.PicturesLibrary.GetFilesAsync();
4             this.DataContext = files;
5         }

 “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的异步机制

相关文章
相关标签/搜索