1

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;
        }

    }
4

0 に答える 0