博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二十章:异步和文件I/O.(十)
阅读量:6248 次
发布时间:2019-06-22

本文共 1557 字,大约阅读时间需要 5 分钟。

适应Windows运行时文件I/O.

Windows运行时API定义了一个全新的文件I / O类数组。 对此的部分推动力是认识到从桌面应用程序相对不受限制的文件访问向更沙盒化的环境转变的行业范围。
大多数新文件I / O API都可以在Windows运行时命名空间Windows.Storage和Windows.Storage.Streams中找到。 要存储应用程序专用的数据,Windows运行时程序首先获取一个特殊的StorageFolder对象:

StorageFolder localFolder = ApplicationData.Current.LocalFolder;

ApplicationData定义名为Current的静态属性,该属性返回应用程序的ApplicationData对象。 LocalFolder是ApplicationData的实例属性。

StorageFolder定义名为CreateFileAsync的方法以创建新文件,使用GetFileAsync来打开现有文件。这两个方法获取StorageFile类型的对象。使用该对象,程序可以使用OpenAsync或OpenReadAsync打开文件进行写入或读取。这些方法获取IRandomAccessStream对象。由此,创建DataWriter或DataReader对象以执行写入或读取操作。
这听起来有点冗长,而且确实如此。相当简单的方法涉及FileIO类的静态方法,它们类似于.NET File类的静态方法。对于文本文件,例如,FileIO.ReadTextAsync和FileIO.WriteTextAsync打开文件,执行读取或写入访问,并一次性关闭文件。这些方法的第一个参数是StorageFile对象。
无论如何,到目前为止,您无疑已经注意到这些方法名称上经常出现的Async后缀。在内部,所有这些方法都会分离执行的辅助线程以执行实际工作并快速返回给调用者。工作在后台进行,并通过回调函数通知调用者完成(或错误)。
为什么是这样?
当Windows 8首次创建时,Microsoft开发人员对时序进行了很好的审视,并决定执行任何需要超过50毫秒的函数调用应该是异步的,这样它就不会干扰用户界面的响应性。需要超过50毫秒的API显然包括文件I / O功能,这些功能通常需要访问可能较慢的硬件,如磁盘驱动器或网络。任何Windows运行时文件I / O.
可能导致物理存储设备被访问的方法是异步的并且给出了Async后缀。
但是,这些异步方法不返回Task对象。在Windows运行时中,返回数据的方法具有IAsyncOperation 的返回类型,而不返回信息的方法具有IAsyncAction的返回类型。这些接口都可以在System.Foundations命名空间中找到。
虽然这些接口与Task和Task 不同,但它们类似,您可以使用它们等待它们。您还可以在两个异步协议之间进行转换。 System.Runtime.WindowsRuntime程序集包含一个带有WindowsRuntimeSystemExtensions类的System命名空间,该类具有名为AsAsyncAction,AsAsyncOpertion和AsTask的扩展方法,用于执行这些转换。
让我们重新编写TextFileTryout程序以适应异步文件I / O.修订后的程序称为TextFileAsync,将在下一节中进行开发。由于将访问Windows项目中的异步文件I / O函数,因此IFileHelper接口中的所有文件函数都被定义为返回Task或Task 对象。
为什么删除红包码了呢?不允许赚点外块啊。
你的支持是我继续的动力啊。
123

转载地址:http://zxlia.baihongyu.com/

你可能感兴趣的文章
ASP.NET MVC之从控制器传递数据到视图方式
查看>>
IsPostBack原理详解
查看>>
华为交换机-SNMP配置
查看>>
centos修改mysql密码或者进入mysql后解决Access denied for user ''@'localhost' to database 'mysql错误...
查看>>
分数阶傅里叶变换(FRFT)
查看>>
hibernate(八)一对多关联
查看>>
swift - 本地通知2 - 啰嗦版
查看>>
swift - idfa(唯一标示/下载量/广告追踪)
查看>>
GC垃圾回收
查看>>
HDU 4804 Campus Design
查看>>
nyist 42 一笔画 (欧拉回路 + 并查集)
查看>>
用javascript实现用户登录验证
查看>>
博客05--查找
查看>>
进程与线程
查看>>
git 创建本地分支、提交到远程分支
查看>>
什么是http?
查看>>
pthreads v3下的同步处理synchronized
查看>>
10.第一个小项目
查看>>
SDS(Simple Dynamic String)一个简易动态字符串库
查看>>
swfit-pod使用
查看>>