【问题标题】:Application settings do not allways save应用程序设置并不总是保存
【发布时间】:2010-05-14 17:03:43
【问题描述】:

我有一点Heisenbug。我有一个最近搜索的列表,有时它会保存历史,有时它不会。当我附加调试器并单步执行StartFind() 时,它每次都能正常工作。

public Form1()
{
    oldClinicsBindingSource.DataSource = ContractFlowTool.Properties.Settings.Default.RecentClinics;
}
private void StartFind()
{
    (...)
    if (oldClinicsBindingSource.Contains(newClinic))
        oldClinicsBindingSource.Remove(newClinic);
    oldClinicsBindingSource.Insert(0, newClinic);
    oldClinicsBindingSource.EndEdit();
    while (ContractFlowTool.Properties.Settings.Default.NumberOfClinicsToRemember < oldClinicsBindingSource.Count)
    {
        oldClinicsBindingSource.RemoveAt(oldClinicsBindingSource.Count - 1);
    }
    ContractFlowTool.Properties.Settings.Default.Save();
    (..)

}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{ //Breakpoint on this line
    ContractFlowTool.Properties.Settings.Default.Save();
}

//In Settings.Designer.cs
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.Collections.ArrayList RecentClinics {
    get {
        return ((global::System.Collections.ArrayList)(this["RecentClinics"]));
    }
    set {
        this["RecentClinics"] = value;
    }
}

如果我在Form1_FormClosing 内保存之前在{ 上设置断点,然后点击继续(我什至不跳过),它会正确保存。如果断点不存在,则不会保存。

该程序确实在其他部分使用后台工作人员,但他们没有在我的测试用例中运行。

任何帮助将不胜感激。

【问题讨论】:

  • 听起来可能是线程问题。
  • 不是问题,但是 BindingSource.EndEdit() 是不必要的,在这种情况下不会做任何事情。
  • 我不会产生任何其他接触ContractFlowTool.Properties.Settings.Default.RecentClinics的线程,这是在主线程上运行的。

标签: c# save application-settings


【解决方案1】:

注释掉StartFind() 中的Save() 似乎已修复它。

我仍然很好奇为什么会这样。绑定源是否使用内部线程?

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2017-03-14
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多