2010-05-14 2 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

+0

Не проблема, но BindingSource.EndEdit() не требуется и в этом случае ничего не делает. –

+0

Я не создаю ни одного другого потока, который касается 'ContractFlowTool.Properties.Settings.Default.RecentClinics', который работает в основном потоке. –

ответ

0

Замечание Save() внутри StartFind(), похоже, исправил его.

Мне все еще интересно, почему это произошло. Используете ли источники связывания внутреннюю резьбу?

Смежные вопросы