0

WP7アプリケーションを磨いているときにこの問題が発生しました。

非アクティブ化されているときにゲームの状態を保存するためにMicrosoftのガイドラインに従いますが、実行時にいくつかのデータも保存したいと思います。

これは、バッテリーがデバイスから取り外されたときに、非アクティブ化/クローズコールバックがトリガーされないためです。

これに伴う問題は、ユーザーがゲームをウォークスルーし、誤ってデバイスからバッテリーを取り外した場合に発生します。ゲームの進行状況はすべて失われます。

そのため、いくつかの中間チェックポイントでゲームの状態を保存しますが、データがすぐに保存されないことに気付きました。これは私の「保存」機能です。

    public void SaveAppModelToIsolatedStorage()
    {
        using (var store = IsolatedStorageFile.GetUserStoreForApplication())
        using (var stream = new IsolatedStorageFileStream(APPMODEL_DATAFILE,
                                                          FileMode.Create,
                                                          FileAccess.Write,
                                                          store))
        {
            var serializer = new XmlSerializer(typeof(AppModel));

            try
            {
                serializer.Serialize(stream, AppModel);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Cant serialize AppModel:" + ex.Message);
            }
        }
    }

呼び出された後、数秒以内にバッテリーを取り外すと(数はわかりませんが、常に30未満)、アプリケーションはゲームの進行を失うことになります。バッテリーを取り外す前に待つと、データは正常に保存されます。この動作は、さまざまなWP7電話で観察されます。

また、文字列バッファーにシリアル化してから、を呼び出してその文字列バッファーをファイルに書き込んでみましたstream.Write()が、結果は同じです。また、stream.Flush()効果がないようです。

この動作はプラットフォーム機能ですか?

マーケットプレイスアプリのMicrosoft認定に関しては問題ありませんか?

または、データをすぐに保存する方法はありますか?

4

2 に答える 2

2

stream.Closeデータをフラッシュする必要があるときに呼び出すだけです。

また、電話してみてくださいstream.Flush(true);

于 2012-04-10T12:33:53.197 に答える
0

これは、分離ストレージのパフォーマンスに関して興味深いかもしれません: forums.create.msdn.com/forums/p/71708/71708.aspx

于 2012-04-10T11:40:29.537 に答える