привязка datagridview в фоновом режиме (или с использованием потока) в c#

#c# #winforms #datagridview #backgroundworker

#c# #winforms #datagridview #backgroundworker

Вопрос:

У меня есть список (типа class). В нем есть несколько строк .. например, 44000, и мне нужно привязать его к datagridview в c #. Я хочу сделать это, не забирая у пользователя управление пользовательским интерфейсом. Даже когда я использую фоновый рабочий, в строке заголовка указано, что он не отвечает.

это так просто, как

dataGridView1.DataSource = bars; где bars — это список привязок, содержащий 44000 строк.

Эта единственная строка забивает весь пользовательский интерфейс и время..

Есть идеи?

Комментарии:

1. bars Предварительно загружено в поток?

2. Это всегда будет сложно, потому что вам нужно обновлять пользовательский интерфейс в потоке пользовательского интерфейса, но вы хотите время от времени эффективно приостанавливать обработку событий пользовательского интерфейса, таких как перерисовка. Вы пытались установить источник данных в качестве пустой ObservableCollection, а затем заставить BackgroundWorker отправлять серию запросов в поток пользовательского интерфейса, чтобы добавить элементы в эту коллекцию в виде блоков более подходящего размера?

3. Просмотрите свои свойства AutoSizeColumn.

4. Можете ли вы показать, как вы реализуете своего фонового рабочего? И каков тип данных «bars»… DataTable, список<> и т.д.

5. .Да, предварительно загружены бары. К вашему сведению: общедоступный класс Bar { общедоступная метка даты DateStamp { get; set; } общедоступный десятичный Open { get; set; } общедоступный десятичный Close { get; set; } } Список привязок<Bar> bars; Я загружаю bars на сервер и отправляю его клиенту, и это происходит почти мгновенно. Я запустил приложение в режиме отладки, и строка dataGridView1.DataSource = bars; принимает все управление пользовательским интерфейсом. Я мог бы выбрать запуск datagridview в виртуальном режиме и реализовать все его functions..but..is есть ли другая альтернатива?

Ответ №1:

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

Не существует идеального решения, поскольку размер вашего списка настолько велик, что привязка всего этого так или иначе приведет к снижению производительности.