2010-05-14 41 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()似乎已修復它。

我仍然好奇它爲什麼會發生。綁定源使用內部線程嗎?

相關問題