为什么隔离存储不会在我的WP7应用程序中持续存在?

我正在为我的应用程序使用IsolatedStorageSettings.ApplicationSettings。 与隔离存储相关的所有代码都发生在我的Application_Launching,Application_Activated,Application_Closing和Application_Deactivated方法中,如下所示:

public IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; private void Application_Launching(object sender, LaunchingEventArgs e) { if (settings.Contains("myObjList")) { App.ObjList = (ObservableCollection)settings["myObjList"]; } else { settings.Add("myObjList", App.ObjList); } } private void Application_Activated(object sender, ActivatedEventArgs e) { if (settings.Contains("myObjList")) { App.ObjList = (ObservableCollection)settings["myObjList"]; } else { settings.Add("myObjList", App.ObjList); } } private void Application_Deactivated(object sender, DeactivatedEventArgs e) { settings["myObjList"] = App.ObjList; settings.Save(); } private void Application_Closing(object sender, ClosingEventArgs e) { settings["myObjList"] = App.ObjList; settings.Save(); } 

所有这些都发生在默认情况下为每个新应用程序创建的App.xaml.cs文件中。

我尝试使用后退按钮以及使用Windows按钮退出应用程序。 让仿真器保持运行,我尝试使用后退按钮重新打开应用程序,然后导航到应用程序列表并打开。

我遇到的问题是在加载或激活settings.Contains [“myObjList”]返回false并继续将键重新添加到设置。

有谁知道为什么我的设置键(和值)不持久?

我看到一些问题:

  1. IsolatedStorageSettings文档明确表示不要调用Save(),因为它不是线程安全的(向下滚动到WP的平台注释)并可能引发exception(并导致您的设置不被保存)。

  2. 这似乎不是这种情况,但是使用字符串“myObjList”是非常危险的,因为它很容易被误解。 我会把它放在一个常量中,并排除任何输入错误

  3. 根据我的经验, IsolatedStorageSettings在当前的WP7版本上不是很强大。 您最好创建一个类并将其序列化为IsolatedStorage文件。 无论如何继续你的应用程序,你可能会有更多的东西要保存,你会有更清晰的代码。

你的class级是myObj Serializable吗? 根据经验,如果没有,则不会抛出任何错误,它根本不会添加到IsolatedStorage。

您可以使用类中的DataContract和DataMember属性来启用此function,如下所示。

 [DataContract] public class myObj { [DataMember] public string Name { get; set; } [DataMember] public string Id { get; set; } [DataMember] public string Phone { get; set; }