我正在使用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();
谢谢!!!!