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__0
15 mscoree3_7。 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 回答