本地存储 - WIn 8 C#

时间:2013-11-06 07:13:35

标签: c# arrays file windows-8 local-storage

我在Windows Phone商店中发布了一个应用程序,我正在将应用程序移植到Windows 8。 有一组值需要持久保存。我在ApplicationDataContainer中保存的值越小(计数越少,设置越少)。我有一个需要保存的日期时间数组。但每次用户输入日期时我都会将该日期保存到数组中。然后将该数组写入文本文件。

由于我无法像WP中的OnBackKeyPress那样找到应用程序的单个退出,因此我在用户输入日期后立即将该数组写入文件。因此,当用户连续输入日期时,它会打开文件,每次都写入数组。当用户打开应用程序时,它会从文件中读取它并根据日期更新UI。

现在的问题是..假设您不断输入日期,然后快速关闭应用程序,下次打开它时,只保存几个日期..其余日期都有垃圾值。 但是当使用断点进行调试时,文件编写正确完成。当我在进入下一个日期之前给出大约1或2秒的时间间隔时,它也可以正常工作。

是不是因为没有调试时,UI加载速度更快?由于后台文件编写尚未完成,因此jus将被终止。我该如何解决这个问题?我是否保存了日期数组?

修改

这就是我写入文件的方式。我已经包含了一个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;
        }

    }

0 个答案:

没有答案