Я считаю, что проблема в том, что вы открываете / сохраняете / обновляете и т. Д. Конфигурацию много раз, без необходимости.
Я быстро "встроил" требуемые вызовы, чтобы они выполнялись только при необходимости.и добавил 2-й метод, чтобы сделать рекурсивные вызовы без повторного открытия / сохранения.(НЕПРОВЕРЕНО)
Проверьте, работает ли это для вас.
public static void SearchAndSaveSelectedNodes(TreeNodeCollection nodes)
{
// open config (only once)
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// make edits (recursive)
SearchAndSaveSelectedNodesRecursive(nodes, config);
// save (only once)
config.Save(ConfigurationSaveMode.Modified);
// (afaik there is no need to refresh the section)
}
private static void SearchAndSaveSelectedNodesRecursive(TreeNodeCollection nodes, Configuration config)
{
foreach (TreeNode n in nodes)
{
config.AppSettings.Settings.Remove(n.Name);
if (n.Checked)
{
// no need to delete again here (it's already deleted)
config.AppSettings.Settings.Add(n.Name, n.Name + "@" + n.FullPath);
}
SearchAndSaveSelectedNodesRecursive(n.Nodes, config);
}
}