【发布时间】: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