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