WinRT中的DataContractSerializer

6

我正在练习WinRT API,但遇到了一些问题,需要您的帮助。

我想尝试使用并参考这个网站:

http://winrtstoragehelper.codeplex.com/

代码如下:

Stream inStream = Task.Run(() => readStream.OpenRead()).Result;

我认为这应该是一个(错误?):
Stream inStream = await Task.Run(() => readStream.OpenRead());

但最奇怪的是,如果我只使用:
Stream inStream = readStream.OpenRead());

然后我将此流传递到:

DataContractSerializer.WriteObject

API将会永远卡住。

但是如果我使用:

Stream inStream = await Task.Run(() => readStream.OpenRead());

将此流传递给WriteObject,然后它将正常工作。

我不知道为什么如果我不使用Task.Runawait来处理流,则只会出现这种症状。

有人可以给我一些建议或建议吗?


但是

Stream inStream = readStream.OpenRead()方法没有命名为“async”

我不知道为什么我需要故意创建任务才能做到这一点。

谢谢。

1个回答

4
答案在项目描述中:
ObjectStorageHelper是一个通用类,简化了在WinRT应用程序中存储数据的过程,同时保持了Metro风格应用程序的异步原则。在WinRT中,所有文件/IO操作都是异步进行的,因此需要使用也是异步的方法(至少要得到任何结果)。新的"await"关键字是一种实现这一点的方式,尽管您也可以显式地分配回调函数来处理异步操作的完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接