0

IsolatedStorageException があるというスタック トレース レポートを受け取りました。

「フレーム イメージ関数オフセット
0 coredll.dll xxx_RaiseException
1 mscoree3_7.dll
2 mscoree3_7.dll
3 mscoree3_7.dll
4 TransitionStub
5 System.IO.IsolatedStorage.IsolatedStorageSettings.Save
6 System.IO.IsolatedStorage.IsolatedStorageSettings.Clear
7 AppName.CycleManager.WriteToIsolatedStorage
8 AppName.SettingsPage.OnNavigatedFrom
9 Microsoft.Phone.Controls.PhoneApplicationPage.InternalOnNavigatedFrom
10 System.Windows.Navigation.NavigationService.RaiseNavigated
11 System.Windows.Navigation.NavigationService.CompleteNavigation 12 System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback
13 System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread 14 ._ c _DisplayClass4._BeginLoad_b__e3
_15. ms dll
16 mscoree3_7.dll
17 mscoree3_7.dll
18 System.Reflection.RuntimeMethodInfo.InternalInvoke 19 System.Reflection.RuntimeMethodInfo.InternalInvoke "

したがって、例外は WriteToIsolatedStorage() によって発生すると思います。

public void WriteToIsolatedStorage()
    {
        IsolatedStorageSettings dataStorage = IsolatedStorageSettings.ApplicationSettings;
        dataStorage.Clear();


        dataStorage.Add("firstLaunchDate", App.LaunchedDateTime);

        dataStorage.Add("weekStart", m_bWeekStart);

        dataStorage.Add("iHistCount", m_iHistCount);

        // All the variables i need to store

        dataStorage.Add("noteCount", m_noteCount);

        WriteNotesToFile();

        dataStorage.Add("weightCount", m_iWeightCount);

        WriteWeightToFile();

        dataStorage.Add("tempCount", m_iTempCount);

        WriteTempToFile();

        dataStorage.Save();
    }

アップデート:

    public void WriteNotesToFile()
    {
        if (m_noteCount > 0)
        {
            try
            {
                using (IsolatedStorageFile storagefile = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (storagefile.FileExists("NotesFile"))
                    {
                        using (IsolatedStorageFileStream fileStream = storagefile.OpenFile("NotesFile", FileMode.Open, FileAccess.ReadWrite))
                        {
                            StreamWriter writer = new StreamWriter(fileStream);

                            for (int i = 0; i < m_noteCount; i++)
                            {
                                //writer.Write(m_arrNoteDate[i].ToShortDateString());
                                writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture));
                                writer.Write(" ");
                                writer.Write(m_arrNoteString[i]);
                                writer.WriteLine("~`");
                            }
                            writer.Close();
                        }
                    }
                    else
                    {
                        storagefile.CreateFile("NotesFile.txt");
                        using (IsolatedStorageFileStream fileStream = storagefile.OpenFile("NotesFile", FileMode.Create, FileAccess.ReadWrite))
                        {
                            StreamWriter writer = new StreamWriter(fileStream);

                            for (int i = 0; i < m_noteCount; i++)
                            {
                                //writer.Write(m_arrNoteDate[i].ToShortDateString());
                                writer.Write(m_arrNoteDate[i].ToString("d", CultureInfo.InvariantCulture));
                                writer.Write(" ");
                                writer.Write(m_arrNoteString[i]);
                                writer.WriteLine("~`");
                            }
                            writer.Close();
                        }
                    }
                }
            }
            catch { }
        }
    }

例外がスローされる条件を誰か教えてください。十分なスペースがない場合、そのような例外がスローされることをどこかで読みました。

最後に、値を書き込む 4 つの独立したストレージ ファイルがあります。次の方法で 4 つすべてを削除できますか?

IsolatedStorageFile storagefile = IsolatedStorageFile.GetUserStoreForApplication();
storagefile.Remove();

誰かがこれらを明確にすることができれば、本当に感謝しています。

ありがとうございました、

4

1 に答える 1

2

Save十分なスペースがない場合、への呼び出しは失敗します。
メソッドが何を行っているかを確認WriteXxxxToFile()できないため、この問題を引き起こす可能性のある何かを行っている可能性があります。

また、複数のスレッドが設定にアクセスしようとしたり、アプリを閉じたり廃棄したりしているが、保存方法に時間がかかりすぎるという問題に関連している可能性もあります。

真の原因を特定するための最善の策は、 への呼び出しでWriteToIsolatedStorage()このような例外が発生するシナリオをサポートする処理を追加し、アプリやニーズに応じてログに記録して報告することです。

についてRemoveは、MSDNによると

「このメソッドは、現在のユーザーのアプリケーションとそのすべてのディレクトリとファイルの分離ストレージ全体を完全に削除します。」

于 2012-05-09T10:48:21.370 に答える