2013-08-26 2 views
0

Вот мой код для некоторых параметровSystem.Collections.Generic.KeyNotFoundException, казалось бы, без причины

if (settings.Contains("dynamicOn")) 
     { 
      // Commenting out because we're trying a different way 
      // DynamicCheck.IsChecked = (bool)settings["dynamicOn"]; 
      dynamicToggle.IsChecked = (bool)settings["dynamicOn"]; 
      AllPacks.IsChecked = (bool)settings["changeAllPacks"]; 
     } 

А вот XAML за ним

<toolkit:ToggleSwitch x:Name="dynamicToggle" Header="Dynamically Update Lockscreen?" Margin="0,112,0,-112" SwitchForeground="White" Checked="DynamicCheck_Checked_1" Unchecked="DynamicCheck_Unchecked"> 
         <toolkit:ToggleSwitch.HeaderTemplate> 
          <DataTemplate> 
           <ContentControl Content="{Binding}"/> 
          </DataTemplate> 
         </toolkit:ToggleSwitch.HeaderTemplate> 
        </toolkit:ToggleSwitch> 
        <CheckBox x:Name="AllPacks" Content="All Packs" Checked="AllPacks_Checked" Unchecked="AllPacks_Unchecked" Margin="50,174,0,0" Visibility="Collapsed"/> 

Теперь XAML работает отлично, как и а также ToggleSwitch. Все это работает. Просто, когда я пытаюсь на самом деле открыть свою страницу настроек (которая открывается просто отлично без CheckBox вещи, но отказывается открыть с ним), я получаю эту ошибку

A first chance exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.ni.dll The program '[3048] TaskHost.exe' has exited with code -1 (0xffffffff). 

Кто-нибудь видел это раньше? Поиск Bing, похоже, не имеет ничего для меня. Любая помощь будет принята с благодарностью!

Спасибо, Патрик

EDIT: Я изменил код этого

if (settings.Contains("dynamicOn")) 
     { 
      // Commenting out because we're trying a different way 
      // DynamicCheck.IsChecked = (bool)settings["dynamicOn"]; 
      AllPacks.IsChecked = (bool)settings["changeAllPacks"]; 
      dynamicToggle.IsChecked = (bool)settings["dynamicOn"]; 
     } 
     else 
     { 
      // Commenting out because we're trying a different way 
      // DynamicCheck.IsChecked = true; 
      // isEnabledText.Visibility = Visibility.Visible; 
      // settings.Add("dynamicOn", true); 
      dynamicToggle.IsChecked = true; 
      AllPacks.IsChecked = true; 
      AllPacks.Visibility = Visibility.Visible; 
      settings.Add("changeAllPacks", true); 
      settings.Add("dynamicOn", true); 
     } 

И теперь это ошибки на

settings.Add("dynamicOn", true); 

и ошибка также изменен

A first chance exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll 

Итак, я начинаю думать, что это может быть проблема с Изоляцией?

+0

Вместо того, чтобы угадывать, найдите трассировку стека исключения и посмотрите, какая именно строка кода вызывает проблему. – RobSiklos

ответ

1

Вы проверяете, что settings содержит dynamicOn, но как насчет changeAllPacks. Вероятно, эта настройка не определена, и именно поэтому вы получаете ошибку.

0

Как определить настройки? Если вы пытаетесь сохранить настройки приложения, попробуйте вместо этого использовать IsolStoragSettings.ApplicationSettings. Я использую это и на самом деле имею вспомогательные методы в классе SettingsManager для получения и установки любых значений. (Здесь есть код Mutex, так как мои настройки доступны как для переднего плана, так и для фоновой задачи, и это предотвращает возникновение любых конфликтов.)

Значение по умолчанию также делает ваш код более простым, поскольку у вас нет чтобы проверить, существует ли первое значение.

public static T GetSetting<T>(string settingKey, T defaultValue) 
{ 
    Mutex mutex = new Mutex(false, "MyAppSettingsLock"); 
    mutex.WaitOne(); 

    T result; 
    if (IsolatedStorageSettings.ApplicationSettings.Contains(settingKey)) 
     result = (T)IsolatedStorageSettings.ApplicationSettings[settingKey]; 
    else 
     result = defaultValue; 

    mutex.ReleaseMutex(); 

    return result; 
} 

public static void SetSetting<T>(string settingKey, T value) 
{ 
    Mutex mutex = new Mutex(false, "MyAppSettingsLock"); 
    mutex.WaitOne(); 

    IsolatedStorageSettings.ApplicationSettings[settingKey] = value; 
    IsolatedStorageSettings.ApplicationSettings.Save(); 

    mutex.ReleaseMutex(); 
} 
+0

Изолированный доступ к хранилищу может быть взломанным - вам следовало бы поместить этот код в блок 'try', и положил' mutex.ReleaseMutex(); 'в' finally' – RobSiklos

+0

Хорошая точка. Благодаря! –

0

Не уверен, что именно то, что случилось .. Но почему-то этот вопрос, казалось, само рассосется .. Спасибо за все в любом случае помощь, хотя!

Смежные вопросы