use*_*477 6 c# c#-5.0 windows-runtime
我正在练习WinRT API,但遇到一些需要你帮助的问题.
我想试试DataContractSerializer并引用这个网站:
http://winrtstoragehelper.codeplex.com/
代码:
Stream inStream = Task.Run(() => readStream.OpenRead()).Result;
Run Code Online (Sandbox Code Playgroud)
我认为应该是(bug?):
Stream inStream = await Task.Run(() => readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)
但最奇怪的是,如果我只使用:
Stream inStream = readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)
我把这个流传递给:
DataContractSerializer.WriteObject
Run Code Online (Sandbox Code Playgroud)
API将永远停滞不前.
但如果我使用:
Stream inStream = await Task.Run(() => readStream.OpenRead());
Run Code Online (Sandbox Code Playgroud)
并将此流传递给WriteObject当时它将正常工作.
我不知道为什么只有在我不使用Task.Run和await流的情况下才会出现这种症状.
任何人都可以给我一些建议或建议吗?
但
Stream inStream = readStream.OpenRead()方法没有被命名为"async"
我不知道为什么我需要有目的地创建任务来执行此操作.
谢谢.
答案在项目描述中:
“ObjectStorageHelper 是一个通用类,可简化 WinRT 应用程序中的数据存储,同时仍然保持Metro 风格应用程序的异步 *原则*。”
WinRT 中的所有文件/IO 操作本质上都是异步的,因此需要使用也是异步的方法(至少为了获得任何结果)。新的“await”关键字是实现此目的的一种方法,尽管您也可以显式分配回调函数来处理异步操作的完成。
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |