我有一点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
上放置断点,然后点击继续(我甚至没有跳过),它会正确保存。如果断点不存在则不会保存。
该程序确实在其他部分使用后台工作程序,但它们不在我的测试用例中运行。
非常感谢任何帮助。
答案 0 :(得分:0)
评论Save()
内的StartFind()
似乎已经修复了它。
我仍然很好奇为什么会这样。绑定源是否使用内部线程?