我发生了一些奇怪的情况。我已经创建了一个非常简单的类。
[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,因为我希望偶尔会出现错误,并且需要确保记录以前的“Sync'd”项目。