C#如何从bindingSource中删除不断更新的项目(数据)

时间:2018-10-26 12:57:16

标签: c# multithreading datasource

我正在使用datagridView,它已绑定到bindingsource, 此绑定源是List<MyClass>的数组。  bindingsource不断地从其他线程更新(每100毫秒)。

* other threads can remove, add or update the bindingsource in any give time.

1)bindingsource.Remove(object)方法未删除对象,因为属性值不同,因此没有匹配项可以正常工作。

2)bindingsource.RemoveAt(int)确实删除了该对象,但是在某些情况下是错误的对象,因为bindingsource索引被其他线程更新不断更改。

我可以通过属性名称从bindingsource中删除对象吗?要么 如何删除正确的对象?

下面的代码是无效的RemoveAt

        dataGridView_manage_positions.SuspendLayout();
        var position = GetPosition(uniqueID);
        int index = 0;
        for (int i = 0; i < _bindingSource_manage_grid.Count; i++)
        {
            var row = (MyClass)_bindingSource_manage_grid[i];
            // EXAMPLE: the row.Net = 1.52
            if (row.ID != position.ID)
                continue;

            dataGridView_manage_positions.BeginInvoke(new Action(() =>
            {
                 // this the problem. HERE i have a race condition 
                 // EXAMPLE: the row.Net = 2.56
                 // now the Remove() will not work, because the object value is different
                _bindingSource_manage_grid.Remove(row);
            }));

            break;
        }

            dataGridView_manage_positions.ResumeLayout();

谢谢!!!!

0 个答案:

没有答案