ListBoxを子オブジェクトで更新し続けるのに問題があります。更新されたオブジェクトのリストボックスを保持する方法は?
私は2つのList
を使用しています。合計と現在とタイマー。 1000ミリ秒ごとに、現在の子オブジェクトセットが照会され、私の合計リストに追加されます。私の現在のリストは現在の項目だけでインスタンス化されます(はの合計ではありません)。
次に、合計リストと現在のリストを比較します。現在のリストに見つからない、合計リスト内のオブジェクトがすべて削除され、続いて合計リストの各オブジェクトがListBoxに追加されます。
private List<IAgStkObject> _liveListOfEntities;
private List<IAgStkObject> _totalListOfEntities = new List<IAgStkObject>();
private void UpdateEntityList() {
IAgStkObjectElementCollection stkScenarioEntities;
if (_stkObjectRoot.HasChildren) {
_liveListOfEntities = new List<IAgStkObject>();
foreach (AgESTKObjectType typeOfElement
in Enum.GetValues(typeof(AgESTKObjectType))) {
stkScenarioEntities =
_stkObjectRoot.CurrentScenario.Children.GetElements(typeOfElement);
foreach (IAgStkObject entity in stkScenarioEntities) {
_liveListOfEntities.Add(entity);
if (!_totalListOfEntities.Contains(entity)) {
_totalListOfEntities.Add(entity);
}
}
}
foreach (IAgStkObject entity in _totalListOfEntities) {
if (!_liveListOfEntities.Contains(entity)) {
// remove
_totalListOfEntities.Remove(entity);
}
else if (!lsbEntities.Items.Contains(entity.InstanceName)) {
lsbEntities.Items.Add(entity.InstanceName);
}
}
}
私は、任意のオブジェクトが削除されたときに例外を取得しておいてください。Collection was modified; enumeration operation may not execute.
多くの場合、 'List .RemoveAll(...)'は、これをエレガントに達成することができます。 –
CodesInChaos
+1私の答えを仕上げ:) –