c# - 如何保持更新的对象列表框?

标签 c# listbox

我在使用子对象更新 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/

相关文章:

c# - 检查之前加载的场景

c# - 如何验证用户是否属于 C#.NET 中的 Active Directory 用户组

c# - 在更新面板的列表框中保持滚动位置,而不是页面

c# - Entity Framework 核心,代码先迁移随数据迁移

c# - 删除方法不删除

c# - 创建一个带有从 0 到 1 的十进制参数的方法

javascript - 在列表框中显示方法的结果

wpf - 将新项目添加到 WPF 列表框时的滑动效果

css - GWT ListBox 在不同浏览器中呈现不同

excel - 调整Listbox.Height问题