Это работает намного лучше, если у вас есть только один поток, который может изменить базовую коллекцию. У меня есть DGV только для чтения, так что единственный способ добавить / удалить строки - это манипулировать базовым BindingSource. У меня есть поток синхронизации, который добавляет / удаляет элементы из BindingSource через равные промежутки времени.
Мне пришлось сделать одну «хитрую» вещь - если обновляемый элемент является выбранным, вы не можете просто сказать
myBindingSource[n] = newItem;
но скорее вы должны глубоко скопировать значения из нового элемента в существующий. В противном случае вы вызовете «измененное» событие, которое перерисовает все остальное, что связано с вашим источником данных. Я получил заметное мерцание, когда сделал эталонное копирование, и переключение на глубокое копирование (только для текущего элемента) исправило его.
Конечно, если вы позволяете пользователю возиться с данными непосредственно из формы, а не использовать их только для чтения, вы открываете совершенно новую (некрасивую!) Банку с червями.