1

私はハイゼンバグを少し持っています。最近検索されたもののリストがあり、履歴が保存される場合と保存されない場合があります。デバッガーをアタッチしてステップスルー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続行をクリックすると(ステップオーバーさえしません)、正しく保存されます。ブレークポイントがそこにない場合、保存されません。

プログラムは他の部分でバックグラウンド ワーカーを使用していますが、私のテスト ケースでは実行されていません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

Save()内部をコメントアウトすると、StartFind()修正されたようです。

なぜそれが起こったのか、私は今でも興味があります。バインド ソースは内部スレッドを使用しますか?

于 2010-05-14T18:26:00.400 に答える