【发布时间】:2012-08-13 08:11:17
【问题描述】:
我的 Win RT 应用程序在 Windows 8 beta 上与 VS2012RC 一起工作,现在在 Visual Studio 和 Windows 8 Pro 的最终版本中出现了问题,只有在我设置调试器时才能在 OnSuspending 中创建/打开文件-文件创建方法的断点。
private void OnSuspending(object sender, SuspendingEventArgs e){
var deferral = e.SuspendingOperation.GetDeferral();
if (null != m_document) Save();
deferral.Complete();
}
async void Save(){
var folder = KnownFolders.DocumentsLibrary;
var file = await folder.CreateFileAsync(GetFileName(),Windows.Storage.CreationCollisionOption.ReplaceExisting);
var xDoc = GetXDocument();
using (var stream = await file.OpenStreamForWriteAsync()){
xDoc.Save(stream);
}
}
如果我在
StorageFile file = await folder.CreateFileAsync(...上设置断点,调试器会进入 继续,一切正常。但是,如果我不设置断点,将创建文件,但是 xml 的内容不会被保存(文件为空)。
如果我在
StorageFile file = await folder.CreateFileAsync(...行下方设置断点,调试器永远不会进入!
有人知道吗?我还测试了一个使用folder.OpenStreamForWriteAsync 的版本,效果完全相同。
【问题讨论】:
-
是否有时间完成操作?
-
@mydogisbox:似乎。但是我不知道为什么。看起来 Save() 中的 await 命令不会等到创建,而是立即(或在文件创建后)从保存函数中返回。如果我在每个方法调用之后添加 Debug.WriteLine-calls,这也是我所看到的。如果没有断点,代码将永远无法到达“var xDox=GetXDocument()”调用。它在文件创建后返回(但没有例外)。
标签: windows-8 visual-studio-2012 async-await windows-store