在C#中调试自定义应用程序设置

时间:2016-08-04 22:32:49

标签: c# serialization xml-serialization settings application-settings

我发生了一些奇怪的情况。我已经创建了一个非常简单的类。

[Serializable]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
public class StockSyncCollection : ObservableCollection<StockSyncDatum>
{
}

public class StockSyncDatum
{
    public StockSyncDatum() { }

    public StockSyncDatum(int posStockId, int posStockCatalogueId, DateTime lastUpdated)
    {
        this.PosStockId = posStockId;
        this.PosStockCatalogueId = posStockCatalogueId;
        this.LastUpdated = lastUpdated;
    }

    public int PosStockId { get; set; }
    public int PosStockCatalogueId { get; set; }
    public DateTime LastUpdated { get; set; }
}

然后我通过设计器创建了一个自定义设置,生成的代码就像这样

[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::Sync.Config.StockSyncCollection StockSyncCollection {
    get {
        return ((global::Sync.Config.StockSyncCollection)(this["StockSyncCollection"]));
    }
    set {
        this["StockSyncCollection"] = value;
    }
}

然而我遇到的问题是我的代码稍后(在将一些项目添加到集合中之后)我将调用

Settings.Default.Save();

但是发生的事情是,只有在调用save方法之前添加到集合中的项目的某些子集实际上是持久的。例如,我可能会添加50个项目,但只会保存其中的10个。

现在请注意我在循环中调用Settings.Default.Save()。我的直觉告诉我,有一些哈希是由未被更新的对象生成的。

所以我想知道你是如何在C#应用程序中调试应用程序设置的?我可以看到SettingsChangingSettingsSaving等各种事件,但我没有看到SettingsSaveError或类似的事件。

任何人都知道可能会发生什么或如何调试它?

编辑:循环代码基本上就是这样。

foreach (var partition in stockTransfers.Partition(PartitionCount))
{
    IList<StockTransferContract> stockTransferContracts = partition.ToStockTransferContracts();

    //Do all the magic syncing stuff...        

    foreach (var item in stockTransferContracts)
        _StockSyncCollection.Add(new StockSyncDatum(posStockId, posStockCatalogueId, DateTime.UtcNow));


    Settings.Default.Save();

}

请注意,我需要调用save,因为我希望偶尔会出现错误,并且需要确保记录以前的“Sync'd”项目。

0 个答案:

没有答案