2

次のコードでは、取得してArgumentExceptionいます。keyこのコードは、 aが に設定されているかどうかをチェックし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();
         }
}
4

2 に答える 2

1

MSDN でわかるよう

ArgumentException次の場合に発生します

キーは辞書に既に存在します。

だから、私は2つの問題を見ることができます:

  • 並列スレッドのどこかに、キー「bm」が設定に保存されています。
  • キーが違います。「ü」と「b」は違う文字ですが、見た目は似ています。

1 つの定数文字列を定義してみてください。

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();
        }

必ず、毎回同じキーを使用してください。

于 2012-10-09T08:47:44.827 に答える
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());
于 2013-07-18T13:19:46.580 に答える