Заполните DataGridView большим количеством данных из асинхронного источника - PullRequest
0 голосов
/ 05 октября 2011

Я пишу приложение, которое читает из нескольких каналов, обслуживаемых веб-сервером, и после обработки ответа выгружает результаты в DataGridView. Есть несколько сотен источников, каждый из которых отвечает примерно 200 тысячами пунктов. Затем они фильтруются на основе некоторых правил регулярных выражений, а те, которые проходят (около 30%), помещаются в DataGridView.

Мне нужен механизм для этого, но со следующими ограничениями:

  • Пользовательский интерфейс должен всегда реагировать.
  • Необходимо получить 5 ресурсов в любой момент времени (т.е. параллельно).
  • Обрабатывать результаты с помощью регулярных выражений параллельно.
  • Время между получением данных с сервера и их отображением в сетке должно быть минимальным.
  • Предпочитает избегать Application.DoEvents ().

Я использую WebClient.DownloadStringAsync, чтобы получить данные с сервера. Помимо этого, я попробовал несколько решений, но ни одно из них не работает хорошо.

1 Ответ

1 голос
/ 05 октября 2011

Вы можете следовать шаблону производителя / потребителя

Producer Thread периодически опрашивает ваши фиды на наличие новых элементов и выполняет фильтрацию регулярных выражений. Если данные проходят фильтр, то они добавляются в параллельную очередь ожидающих элементов (см. Пространство имен System.Collections.Concurrent, если вы используете .NET 4 - это будет хорошо)

Поток потребителя периодически опрашивает очередь ожидающих элементов, и, если он находит какие-либо элементы, он добавляет новые элементы в ваш источник данных, связанный в GUI. Это потребует вызова на поток GUI

...