2010-05-14 23 views
1

我有点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然后继续打(我甚至不跨越),它正确保存。如果断点不存在,则不保存。

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

任何帮助将不胜感激。

+1

听起来像它可能是一个线程问题。 – duffymo 2010-05-14 17:06:43

+0

不是问题,但BindingSource.EndEdit()是不必要的,在这种情况下不做任何事情。 – 2010-05-14 17:28:30

+0

我没有产生任何触及'ContractFlowTool.Properties.Settings.Default.RecentClinics'的线程,它在主线程上运行。 – 2010-05-14 18:09:26

回答

0

StartFind()内部注释掉Save()似乎已修复它。

我仍然好奇它为什么会发生。绑定源使用内部线程吗?

相关问题