|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
|
Асинхронная отрисовка элементов управления на форме21.08.2021, 14:53. Показов 3034. Ответов 9
Здравствуйте, уважаемые!
![]() Имею следующую задачу: отрисовать n-ое кол-во однотипных объектов на форме, их может быть 2, а может быть и 30. Вместе с тем имею следующую проблему, которая заключается в том, что объект является панелью (System.Windows.Forms.Panel), на ней находятся несколько изображений, лейблов. При непосредственной отрисовке такого объекта через цикл, повторюсь, их может быть 30, 1) приложение подвисает, что неудивительно при использовании for 2) "мигают" форма и сами добавляемые объекты при каждом ходе цикла (Doublebuffered = true). Вопрос: можно ли и если можно, то как реализовать отрисовку (добавление на форму объектов) в фоне? Обычные таски и треды не подходят из-за известном ограничении управления объектами из того потока, в котором они были созданы. BackgroundWorker не пробовал, но подозреваю, что получу то же исключение, что и с ранее упомянутыми. P.S. Если это будет важным, то вот немного подробнее описание происходящего: на форме находится TabControl, на одну из его вкладок TabPage через цикл добавляется пользовательский элемент управления через команду Controls.Add(UserControl).
0
|
|
| 21.08.2021, 14:53 | |
|
Ответы с готовыми решениями:
9
Мерцание элементов управления на форме Перебор элементов управления на форме |
|
|
|
| 21.08.2021, 19:23 | |
|
Dr_FvKE, не помню как называлась эта тема, но буквально недавно сам ее смотрел, здесь на форуме. Там как раз были применены UserControl'ы и как раз обсуждалась (была решена) проблема с мерцанием/торможением. Поищите. Если мне попадется снова, сообщу.
Добавлено через 57 секунд Вроде речь шла о программе не то тестов, не то справочников...
1
|
|
|
|
|
| 21.08.2021, 19:27 | |
|
Решать то вам как это приемлимо будет. Используйте те подходы которые существуют (известны и часто используются) в веб-е например. Но важно ещё то какие требования у вас к отрисовке - нужно ли отображать основную форму; добавлять динамически во время работы или ещё как.
Простой пример - скроллим и доходим до последнего нарисованного блока. Дальше что предполагается? подгрузить ещё? можно ли заблокировать весь список для этого или как... Есть вариант - чтобы не "мигало" добавлять все объекты сразу в список. А внутренний контент блокировать и показывать иконку бесконечной загрузки. Когда оно подгрузится и нарисуется то дёрганий не будет, так как контейнер уже был нарисован фиксированного размера. Короче смотря какие контролы, смотря сколько, смотря на что вы готовы...
0
|
|
|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
||||||
| 21.08.2021, 19:52 [ТС] | ||||||
|
Еще раз, мое поле боя - это TabPage, создание панелей происходит в момент выбора определенной вкладки на TabControl.
На момент отрисовки можно блокировать все вкладку, но, желательно, не форму. Тормоза и мигания у меня происходят с 6 объектами, несколько лет назад я делал аналогичный проект и там было около 30-40 таких элементов - они грузились меньше чем за секунду и без тормозов каких либо, а сейчас даже память поджирает хорошенько, об этом и списках - ниже привел код, вызываемый при выборе вкладки.
0
|
||||||
|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
|
| 21.08.2021, 22:03 [ТС] | |
|
HF, Все что более менее подходит под ваш вопрос - выше.
0
|
|
|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
|
| 22.08.2021, 17:20 [ТС] | |
|
Wolfdp, получает список комплектов, на каждый комплект - один файл с JSON содержимым.
0
|
|
|
|
|
| 22.08.2021, 21:01 | |
|
Я бы ожидал увидеть await ReadToEndAsync, а не закидывание в отдельную таску отрисовку по Invoke. Причем если ShowLocalMods вызывается по условной кнопке, то Invoke вообще бесмысленный -- диспетчер вернет управление в главный поток.
Считывание с файла по идеи должно быстро происходить и к миганиям не должно приводить. Хотя может и не прав, и у вас реально подвисает на вычитке и десериализации.
0
|
|
|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
|
| 22.08.2021, 21:13 [ТС] | |
|
Wolfdp, да, вы правы, считывание происходит мгновенно и скорее всего подвисание происходит из-за того, что добавляется около 10 объектов за один ход цикла и просто не хватает времени на их отрисовку. Делал для теста добавление одной панели 10 раз - добавило за секунду без морганий и прочего, в отличии от того варианта, который сейчас.
0
|
|
|
14 / 11 / 1
Регистрация: 16.08.2016
Сообщений: 75
|
||||||
| 25.10.2021, 13:03 [ТС] | ||||||
|
Проблема решена, всем спасибы, кто помогал в решении
![]() Код для формы перерисовки:
https://coderoad.ru/8046560/ка... C-winforms
0
|
||||||
| 25.10.2021, 13:03 | |
|
Помогаю со студенческими работами здесь
10
Анимация элементов управления на форме
Сохранение состояния элементов управления на форме
Динамическое изменение набора элементов управления на форме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|