【问题标题】:Isolated Storage Application Settings Not Persisting after Application exit应用程序退出后隔离存储应用程序设置不保留
【发布时间】:2011-05-20 23:22:14
【问题描述】:

我在使用 WP7 隔离存储和应用程序设置时遇到了一个大问题。 我一直使用 Adam Nathan 的 101 Windows Phone 7 应用程序第 1 卷中的代码作为基础。

我有一个设置页面,可以在其中更改值,并且当应用程序仍在运行时,这些页面仍然处于活动状态,并且一切正常。但是,一旦应用在我的开发者手机上退出,这些内容就会丢失,并且应用会以默认设置重新启动。

我不知道为什么这些值没有持续存在。任何帮助将不胜感激。

这是我得到的代码,来自亚当·内森的新书。我在推特上给他发了一条消息,他说这与不可序列化的数据类型有关。我对此进行了调查,但我只使用了 double 和 bool 值。

public class Setting<T>
{
    string name;
    T value;
    T defaultValue;
    bool hasValue;

    public Setting(string name, T defaultValue)
    {
        this.name = name;
        this.defaultValue = defaultValue;
    }

    public T Value
    {
        get
        {
            //checked for cached value
            if (!this.hasValue)
            {
                //try to get value from isolated storage
                if (IsolatedStorageSettings.ApplicationSettings.TryGetValue(this.name, out this.value))
                {
                    //not set yet
                    this.value = this.defaultValue;
                    IsolatedStorageSettings.ApplicationSettings[this.name] = this.value;
                }

                this.hasValue = true;
            }

            return this.value;
        }

        set
        {
            //save value to isolated storage
            IsolatedStorageSettings.ApplicationSettings[this.name] = value;
            this.value = value;
            this.hasValue = true;
        }
    }

    public T DefaultValue
    {
        get { return this.defaultValue; }
    }

    //clear cached value;
    public void ForceRefresh()
    {
        this.hasValue = false;
    }
}

进一步发展:

我在退出应用程序时收到此错误:

“System.IO.IsolatedStorage.IsolatedStorageException”类型的第一次机会异常发生在 mscorlib.dll 中


发现错误:我是个白痴,漏掉了一个感叹号!来自 trygetvalue 部分。

【问题讨论】:

  • 您能告诉我们您的隔离存储代码吗?
  • 完成了,已经添加到上面了,谢谢
  • 关于异常,请查看此线程:forums.create.msdn.com/forums/t/65662.aspx?PageIndex=1
  • 谢谢,我已经有了这篇文章,虽然相关并没有真正包含问题的解决方案

标签: silverlight windows-phone-7 c#-4.0 isolatedstorage


【解决方案1】:

能否请您发布您的存储代码,以便我们准确了解发生了什么?在没有该代码的情况下,这是我用来将设置保存到本地存储的代码:

IsolatedStorageSettings isoStoreSettings = IsolatedStorageSettings.ApplicationSettings;
if (isoStoreSettings.Contains(key))
{
    isoStoreSettings[key] = value;
}
else
{
    isoStoreSettings.Add(key, value);
}
isoStoreSettings.Save();

我的猜测是,您错过了将隔离存储设置的更改提交到物化隔离存储的最后一行,而不是仅仅将它们留在内存中。如果不是这样,请使用代码编辑您的帖子,以便我们提供帮助。

【讨论】:

  • 当应用程序关闭时更改应该自动保留,但我也总是明确地调用Save()自己。
  • 非常感谢 Jared,我也犯了同样的错误。
  • 我也忘记了Save() 方法,然后编译抛出一个错误,表明我应该在我的类中使用[DataContract][DataMember] 属性来序列化。
猜你喜欢
  • 2013-11-19
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多