我在使用子对象更新 ListBox 时遇到问题。
我正在使用两个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);
}
}
}
当删除任何对象时,我不断收到异常:集合已修改;枚举操作可能无法执行。
最佳答案
您不应该在迭代过程中从集合中删除项目。相反,您应该创建一个临时 List<>
存储对您确定必须删除的项目的引用,然后在使用迭代器的代码之外的代码中删除它们。
关于c# - 如何保持更新的对象列表框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221670/