System.Collections.Generic.KeyNotFoundException似乎没有任何原因
本文关键字:任何原 Collections Generic KeyNotFoundException System | 更新日期: 2023-09-27 18:29:15
以下是我的一些设置的代码
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都可以正常工作。所有这些都有效。只是,当我试图真正打开我的设置页面时(它在没有复选框的情况下打开得很好,但拒绝用它打开),我得到了这个错误
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似乎对我没有任何帮助。如有任何帮助,我们将不胜感激!
谢谢,Patrick
编辑:我已经将代码更改为这个
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
所以,我开始认为这可能是一个孤立存储问题?
您正在检查settings
是否包含dynamicOn
,但changeAllPacks
呢。可能没有定义该设置,这就是您出现错误的原因。
如何定义"设置"?如果您试图存储应用程序设置,请尝试使用IsolatedStoragSettings.ApplicationSettings。我使用它,并且实际上在SettingsManager类中有用于获取和设置任何值的helper方法。(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();
}
不确定到底发生了什么。。但不知怎么的,这个问题似乎自行解决了。。不过,还是要感谢所有的帮助!