|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||||||
.NET 4.x Заполнение DataGridView.DataSource в отдельном потоке19.07.2018, 19:06. Показов 2115. Ответов 14
Метки нет (Все метки)
Добрый день!
Данная тема не столь прям не дает жизни мне, но ответ я бы хотел получить. Имеем гифку типа loading, имеем DGV, которая заполняется в отдельном потоке как .DataSource = DT. Все бы ничего, пока не заметил, что при:
Поиск ничего разумного не дал, всякие методы Invoke, Task'и, Token'ы не помогают, либо я не в том направлении копаюсь. Причем замечено, что при малом кол-ве столбцов в DT "пауз" нет. Можно конечно расчехлить DT и циклами записывать в DGV, но разве нет какого-либо способа добавлять данные в отдельном потоке, не мешая основному? На гифке ниже можно увидеть в самом начале паузу.
0
|
||||||
| 19.07.2018, 19:06 | |
|
Ответы с готовыми решениями:
14
Выполнить функцию в отдельном потоке Загрузка в DataTable из БД в отдельном потоке |
|
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
| 19.07.2018, 22:20 | |
|
Грузить, конечно, можно как угодно, но чтобы отобразить данные, нужно их всё равно передать в поток UI. Поэтому нужно использовать
VirtualMode, суть которого в том, что подгружаются только те данные, которые в данные момент отображаются. Для загрузки нужно использовать события CellValueNeeded, а для реагирования на изменения событие CellValuePushed
0
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
|
| 19.07.2018, 22:51 [ТС] | |
|
ViterAlex, спасибо, но немного не то.
Мне необходимо не видеть, как там данные заливаются в DGV, а видеть плавную гифку, пока данные в DGV льются ![]() В моем случае я просто заливаю DataTable в DataSource, данных не так уж много, 15 столбцов и 100 строк, а тормозящая анимация видна.
0
|
|
|
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
| 20.07.2018, 10:52 | |
|
Jungl, а как ты показываешь эту гифку? Отдельной формой?
0
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||||||
| 20.07.2018, 12:06 [ТС] | ||||||
|
ViterAlex, совсем забыл написать про это...
Гифка в picturebox'е, сам контрол поверх DGV под его размеры и в скрытом режиме. Включаю видимый режим перед вытягиванием данных в отдельном потоке. Если смотреть на цикличную запись в DGV и в нем существующие столбцы:
А поскольку у меня есть DGV, где выгрузка происходит по выбору запроса(их несколько и разного формата полей) самим пользователем, то у меня просто голый DGV и заливка через DataSource. Вроде ничего не забыл.
0
|
||||||
|
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
|
|
| 20.07.2018, 12:16 | |
|
Jungl, думаю будет лучше создать отдельную форму и при загрузке показывать её через ShowDialog.
1
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
|
| 20.07.2018, 12:22 [ТС] | |
|
ViterAlex, я тоже так думаю. Возможно кто-то еще даст ответ. Спасибо.
Пока использую костыль в виде разложения столбцов и строк из DataTable.
0
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
|
| 20.07.2018, 22:02 [ТС] | |
|
Orlangur1991, ничего не изменилось, как подвисало на этом месте, так и подвисает)
0
|
|
|
Модератор
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|
| 24.07.2018, 06:35 | |
|
Jungl, а вы поток подругому создайте с делегатами вместо простого Invoke... должно быть плавно.. либо background worker
0
|
|
|
259 / 200 / 49
Регистрация: 18.12.2015
Сообщений: 416
|
||||||
| 24.07.2018, 23:00 [ТС] | ||||||
|
Yury Komar, в том то и дело, что я пробовал с делегатом. Так же пробовал работать с SynchronizationContext(с ним я до конца не разобрался, пробовал по примерам), та же картина..
Прикрепил небольшой пример проекта, посмотрите. Там как раз те 3 случая, что я использовал. С многопоточностью у меня не совсем гуд, так что критика приветствуется. Между циклами
0
|
||||||
|
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|
| 25.07.2018, 00:28 | |
Сообщение было отмечено Jungl как решение
Решение
Jungl, судя по исходному коду, при присвоении происходит создание коллекции строк внутри dgv пропорционально количеству данных в DataTable. Если стоят параметры расчета высоты строки по вместимости, то накладывается еще дополнительная нагрузка. Так что основной поток будет затыкать из-за циклов внутри dgv. Тут либо хакать dgv (без представления как), либо шаманить с анимацией в отдельном окне
2
|
|
|
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|
| 26.07.2018, 21:04 | |
|
https://www.cyberforum.ru/post12564534.html
Вот, можно попробовать решить проблему с анимацией. Анимация работает в отдельном потоке. Но опять все будет зависеть от того, что вы будите делать параллельно, нет 100 гарантии что анимация слегка не притормозит. Пробовал на двукоре, при 50% нагрузке иногда кратковременные фризы присутствуют, при меньшей нагрузке полет нормальный. На 4коре слегка фризило при заполнении памяти около 2 Гб. Пробуйте. Если будите тестить, расскажите о результате. Я код написал, но сам юзать пока не знаю где.
1
|
|
| 26.07.2018, 21:04 | |
|
Помогаю со студенческими работами здесь
15
Синтез речи в отдельном потоке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|