WP7中IsolatedStorageSettings中的参数异常

时间:2012-10-09 08:21:48

标签: c# silverlight windows-phone-7 exception-handling

在以下代码中,我收到了ArgumentException。此代码检查key中是否设置了IsolatedStorageSetting。如果不存在,则创建它。此时异常发生在message- value does not fall within the expected range上。我做错了什么?

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

         var settings = IsolatedStorageSettings.ApplicationSettings;

        if (settings.Contains("bm"))
        {
            string k = (string) settings["bm"];
            if (k == "1")
            {
                cb1.IsChecked = true;
            }
            else
            {
                cb1.IsChecked = false;
            }
        }
        else
        {
            cb1.IsChecked=true;
            settings.Add("bm","1"); //exception occurs here
            settings.Save();
         }
}

2 个答案:

答案 0 :(得分:1)

尽可能see in MSDN

时出现

ArgumentException

  

键已存在于词典中。

所以,我可以看到两个问题:

  • 在并行线程中的某个位置,键“bm”已保存到设置中。
  • 键是不同的。 “ь”和“b”是不同的字母,但看起来很相似。

尝试定义一个常量字符串:

private const string BM_KEY = "bm";

并在每次访问设置时使用它。

   if (settings.Contains(BM_KEY))
        {
            string k = (string) settings[BM_KEY];
            if (k == "1")
            {
                cb1.IsChecked = true;
            }
            else
            {
                cb1.IsChecked = false;
            }
        }
        else
        {
            cb1.IsChecked=true;
            settings.Add(BM_KEY,"1"); //exception occurs here
            settings.Save();
        }

可以肯定的是,每次都使用相同的密钥。

答案 1 :(得分:0)

或尝试删除已存在的密钥(例如“lastBranoCalled”);)

if (IsolatedStorageSettings.ApplicationSettings.Remove("lastBranoCalled"))
                    IsolatedStorageSettings.ApplicationSettings.Add("lastBranoCalled", this.Panorama.SelectedIndex.ToString());
                else MessageBox.Show("Error");
            else IsolatedStorageSettings.ApplicationSettings.Add("lastBranoCalled", this.Panorama.SelectedIndex.ToString());