我有一个带复选框的元素列表。这些项目在Checkbox
内可用,我将所有已检查的值保存在我的设置应用中,特别是,我有一个名为available_countries
的字段,我将所有事件保存在此字段中。
基本上,当检查项目时,触发相关事件:
private void AvailableCountries_Checked(object sender, RoutedEventArgs e)
{
var item = sender as CheckBox;
if (item.Content.ToString() == "All")//first item of the list need to check all
{
Vm.AvailableNations.Select(c => { c.IsChecked = true; return c; }).ToList(); //Execute the IsChecked update through linq
}
//Check if the checked value is already added in the settings..
var nationsArr = Properties.Settings.Default.available_countries.Split(';');
foreach (var country in nationsArr)
{
if (country == item.Content.ToString()) //Nation already added!
{
return;
}
}
Properties.Settings.Default.available_countries += item.Content.ToString() + ";"; //Separator
Properties.Settings.Default.Save();
}
现在这段代码运行良好且非常简单,但我注意到最后.Save()
会降低应用性能,实际上当我点击ComboBox
的第一项时,{ {1}}:.Content
我需要更改所有元素的所有All
属性。
我还需要检查设置中是否已添加该值。
我注意到如果我删除最后一行代码,我看不到延迟时间,大约1/2秒。
有一种方法可以改善它吗?
答案 0 :(得分:1)
嗯,设置存储在用户配置文件的XML文件中,所以是的,每当您保存设置时,都会有短暂的延迟。没办法改变它。
在您的情况下,可能的解决方案是在选中复选框时不保存设置,但在某些其他事件中(例如设置对话框的“确定”按钮等)。
另一种解决方案是启动后台任务,更改值并保存设置,但您必须确保正确同步。
第三种解决方案是仅更改设置对象,但在应用程序关闭之前不会保存。这会减慢关闭应用程序的过程,但是......