Потокобезопасные структуры данных для DataSource
У меня есть некоторые проблемы с источником данных DevExpress Control. Я хотел бы использовать структуры данных, которые потокобезопасны, как ConcurrentDictionary, Synchronized ArrayList или другие. В каждом случае я достиг кода, подобного этому:
ArrayList resultsList;
ArrayList results1 = ArrayList.Synchronized(resultsList);
...
while(newDataArrived)
{
gridControl.DataSource = results.ToArray() // Line A
}
или это
ConcurrentDictionary<int, object> results2;
...
while(newDataArrived)
{
gridControl.DataSource = results2.Values; // Line B
}
Моя цель состоит в том, чтобы уменьшить код в строке A или строке B. Я хотел бы связать DataSource один раз и иногда аннулировать контроль. Второе ограничение заключается в том, что структура данных должна быть поточно-ориентированной. Вычисления и представления делаются в разных потоках. Спасибо за ответы.
//Target algorithm
_ThreadCollectionList_ results3 = DAL.results;
gridControl.DataSource = results3;
...
while(newDataArrived)
{
gridControl.Invalidate();
}
1 ответ
Я нашел решение для моей проблемы в библиотеке моей компании. К сожалению, это проприетарный код, и я не могу поделиться. Более простое решение описано в этой ссылке: Binding Source НЕ отражает новую / удаленную строку, когда источник данных List добавляет / удаляет элемент