Отладка пользовательских настроек приложения в C#

У меня немного странная ситуация. Я создал очень простой класс как таковой.

[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#? Я могу видеть различные события, такие как SettingsChanging а также SettingsSaving но я не вижу события для 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, потому что я ожидаю, что иногда будут возникать ошибки, и должен убедиться, что отмечены ранее "Синхронизированные" элементы.

0 ответов

Другие вопросы по тегам