我在 Windows Phone 商店中有一个已发布的应用程序,我正在将该应用程序移植到 Windows 8。有一组值需要永久保存。我保存在 ApplicationDataContainer 中的较小值(计数少,设置少) . 我有一个需要保存的日期时间数组。但是每次用户输入一个日期时,我都会将该日期保存到一个数组中。然后将数组写入文本文件。
由于我无法找到像 WP 中的 OnBackKeyPress 这样的应用程序的单个退出,因此我会在用户输入日期后立即将数组写入文件。因此,当用户连续输入日期时,它会打开文件,每次写入数组。当用户打开应用程序时,它会从文件中读取它并根据日期更新 UI。
现在的问题是..假设您不断输入日期,然后快速关闭应用程序,下次打开时,只保存了几个日期..其余日期具有垃圾值。但是当我使用断点进行调试时,文件写入是正确的。当我在输入下一个日期之前给出大约 1 或 2 秒的时间间隔时,它也可以工作。
是不是因为不调试的时候UI加载比较快?而且由于后台文件写入还没有完成,它就被终止了。??我该如何解决这个问题?我要保存日期数组吗?
编辑
这就是我写入文件的方式。我已经包含了一个flushasync :(
public async Task<bool> WriteHistoryToFile()
{
bool fileWrite = false;
if (m_iHistCount > 0)
{
try
{
StorageFile sampleFile = await localfolder.CreateFileAsync("HistoryFile", CreationCollisionOption.ReplaceExisting);
var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
using (var outputStream = stream.GetOutputStreamAt(0))
{
DataWriter dataWriter = new DataWriter(outputStream);
for (int i = 0; i < m_iHistCount; i++)
dataWriter.WriteString(m_dtHistory[i].ToString("d", CultureInfo.InvariantCulture) + "`~");
await dataWriter.StoreAsync();
await dataWriter.FlushAsync();
dataWriter.Dispose();
await outputStream.FlushAsync();
fileWrite = true;
}
}
catch (Exception e)
{
string str = e.Message;
fileWrite = false;
}
return fileWrite;
}
else
{
return fileWrite;
}
}