gpt4 book ai didi

c# - 在 OnSuspending 方法期间保存数据

转载 作者:行者123 更新时间:2023-11-30 13:13:18 24 4
gpt4 key购买 nike

对于 C/XAML 中的 Windows 8 应用程序,我必须将一些数据存储到 LocalState 文件夹中。我认为我在使用 async/await 运算符时遇到了一些麻烦。

当我在应用程序运行时保存数据时,一切正常,但是当我尝试在 OnSuspending 方法期间保存数据时,我的应用程序似乎没有等待我的保存方法完成以暂停申请。

奇怪的是,当我调试并逐步缓慢地执行所有操作时,一切正常,但是当我不放置任何断点时,应用程序在保存数据之前关闭。

这是我的代码:

    private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
await api.BeforeClosing(true);
deferral.Complete();
}

public async Task BeforeClosing(Boolean toTombstoning)
{
SaveItem<LoadingProgress>(fileNameLoadingProgress, InitLoading);
}


public static async void SaveItem<T>(String fileName, T data, Boolean crossThreadSecure = false) where T : IBinarySerializable
{

await CreateNewStorageFile(fileName);

StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFolder dataFolder = await localFolder.GetFolderAsync("Data");

StorageFile file = await dataFolder.GetFileAsync(fileName);

using (var stream = await file.OpenStreamForWriteAsync())
{
using (var writer = new BinaryWriter(stream))
{
writer.Write<T>(data);
}
}
}

public async static Task CreateNewStorageFile(string filename)
{
StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFolder dataFolder = await localFolder.CreateFolderAsync("Data", CreationCollisionOption.OpenIfExists);
storage = await dataFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);
}

我是不是对 await 运算符做错了什么?或者在暂停应用程序之前我们可以做一些操作的最大时间是多少?

谢谢

编辑:我做了一些新测试:如果我删除 deferral.Complete();从 OnSuspending 方法中,它可以很好地保存数据(但显然永远不会关闭应用程序......)。我真的认为问题是我在应用程序挂起时没时间了。它真的看起来像这个线程上的问题:StorageFolder.CreateFileAsync crashes when called from App.OnSuspending .但是我已经尝试了这个问题的所有解决方案,我仍然有问题......

最佳答案

您的问题是您正在调用 Complete在你所有的async之前操作已经完成。

最简单的解决方案是制作SaveItem一个async Task方法而不是 async void , 然后 await它在 BeforeClosing .

一般来说,async方法应始终返回 Task/Task<T>除非他们必须返回void (例如,事件处理程序)。

关于c# - 在 OnSuspending 方法期间保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212831/

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