gpt4 book ai didi

windows-8 - 从 App.OnSuspending 调用时 StorageFolder.CreateFileAsync 崩溃

转载 作者:行者123 更新时间:2023-12-04 17:24:33 26 4
gpt4 key购买 nike

我的 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 的版本,具有相同的效果。

    最佳答案

    问题是对 Save 方法的调用。只有第一部分(创建文件)被等待,第二部分(保存 XML)是异步完成的,因此挂起操作的推迟直到保存过程结束。

    避免此问题的可能解决方案是显式等待保存操作的完成。这可以通过将 OnSuspending 方法声明为 aysnc 来实现。然后用await关键字等待save操作完成(注意保存方法的Task返回类型)。

    private async void OnSuspending(object sender, SuspendingEventArgs e){                        
    var deferral = e.SuspendingOperation.GetDeferral();
    if (null != m_document) await Save();
    deferral.Complete();
    }

    async Task 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);
    }
    }

    我希望这篇文章能帮助其他陷入同样陷阱的人(我想知道为什么 w8 的测试版没有出现这个问题,但我认为 MS 已经优化了应用程序终止过程,因此时间更少了用于暂停过程后的意外工作)...

    关于windows-8 - 从 App.OnSuspending 调用时 StorageFolder.CreateFileAsync 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996288/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com