0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
||||||
1 | ||||||
Показать результаты итераций на отдельной форме10.10.2015, 02:59. Показов 1830. Ответов 8
Метки нет (Все метки)
Приветствую!
Допустим, есть процедура, в которой есть цикл, выполняющийся достаточно долгое время. Хочется сделать так, чтобы перед началом цикла открылась некоторая вторая форма, в которой есть, например, ListBox. По завершении каждой итерации цикла предполагается добавление новой строки в ListBox. При этом, основная форма "блокируется" (так как в ней выполняется сам цикл - их не предполагается выполнять в отдельных потоках), однако вторая форма должна быть активной и доступной для использования. Пример:
0
|
10.10.2015, 02:59 | |
Ответы с готовыми решениями:
8
Как сверить результаты итераций цикла? ProgressBar в отдельной форме БД. Добавление в отдельной форме Изменение в отдельной форме |
3685 / 2596 / 719
Регистрация: 02.08.2011
Сообщений: 6,977
|
|
10.10.2015, 03:19 | 2 |
1.Определите событие в главной форме, которое будете файрить в конце каждой итерации цикла.
2.Создайте вторую форму, определите метод-подписчик на событие в этой форме и откройте ее в диалоговом режиме. 3.Запустите цикл. Profit
0
|
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
|
10.10.2015, 03:36 [ТС] | 3 |
Не уверен, что до конца понял, но.. если я все правильно понимаю, ключевая проблема в том, что вторую форму я должен запускать отдельным потоком и напрямую заставить ее реагировать на события в первой форме не получится (во всяком случае, у меня это не получилось, в том числе и со всякими BackgroundWorker).
Добавлено через 10 минут На всякий случай, еще. Помимо всего прочего, я пытался сделать так: во второй форме сделал static ObservableCollection, содержащий список сообщений. Идея была в том, чтобы из первой формы добавлять в эту коллекцию объекты (что удавалось без проблем, даже при объявленной в другом потоке второй форме - что логично, учитывая static). А уже во второй форме обрабатывал событие CollectionChanged для этой коллекции. И вот даже в этом случае программа падает из-за того, что форма сделана в другом потоке. Единственный условно рабочий вариант, который удался - во второй форме сделать кнопку, которая при нажатии дозаливает новые элементы в ListBox. Допустим, даже получится настроить обновление по таймеру. Но все равно как-то неспортивно - какую-нибудь подписку сделать интереснее было бы.
0
|
3685 / 2596 / 719
Регистрация: 02.08.2011
Сообщений: 6,977
|
|
10.10.2015, 04:17 | 4 |
А не, не тут то было). Сначала выполняется цикл в потоке первой формы, затем, даже если была подписка, пачкой заполняется листбокс. А почему нельзя использовать рабочие потоки? Гарантированно будет работать.
0
|
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
|
10.10.2015, 04:28 [ТС] | 5 |
"...А почему нельзя использовать рабочие потоки? Гарантированно будет работать."
BackgroundWorker? Если да, то у меня по крайней мере не взлетело (но я вполне допускаю, что криво использовал). На всякий случай еще нюанс - процессы Run() я не хочу запускать отдельными потоками, а именно вторую форму.
0
|
3685 / 2596 / 719
Регистрация: 02.08.2011
Сообщений: 6,977
|
|||||||||||
10.10.2015, 04:48 | 6 | ||||||||||
В том то и дело, что рабочие потоки на то и рабочие, используются для вычислительных операций.
Вот что-то похожее на правду, но все равно кривое решение - так не делают. Application.DoEvents рулит). Код первой формы:
Поэтому явно заставляем диспетчер обработать сообщения для потока другого окна. Добавлено через 3 минуты Но чтобы блокировать первую форму, нужно вторую открывать в диалоговом режиме и уже из второй формы запускать рабочий поток и отображать результат.
0
|
6512 / 4088 / 1606
Регистрация: 09.05.2015
Сообщений: 9,554
|
|
10.10.2015, 04:48 | 7 |
Сообщение было отмечено balalexv как решение
Решение
А так не прокатит (см вложение)?
1
|
3685 / 2596 / 719
Регистрация: 02.08.2011
Сообщений: 6,977
|
|
10.10.2015, 04:59 | 8 |
Да, хорошее решение, по сути, вы так и сделали.
0
|
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
|
10.10.2015, 06:16 [ТС] | 9 |
Да, отличное решение. Спасибо всем .
0
|
10.10.2015, 06:16 | |
10.10.2015, 06:16 | |
Помогаю со студенческими работами здесь
9
FTP показать результаты ошибок соединение отдельно Редактирование данных в отдельной форме Фильтрация записей в отдельной форме Вывести ответ в отдельной форме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации
В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
|
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
|
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
|
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
|
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
|
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
|
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
|
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
|
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
|
Какая максимальная длина адреса (URL) в различных браузерах и стандартах
bytestream 21.01.2025
В современном мире интернет-технологий URL-адреса (Uniform Resource Locator) играют фундаментальную роль в функционировании веб-пространства. Эти уникальные идентификаторы ресурсов стали неотъемлемой. . .
|
Как сбросить локальный репозиторий до состояния удалённого репозитория Git
bytestream 21.01.2025
При разработке программного обеспечения с использованием системы контроля версий Git разработчики часто сталкиваются с необходимостью синхронизации локального и удаленного репозиториев. Данная задача. . .
|
Как запретить подсветку выделенного текста с помощью CSS
bytestream 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения.
Выделение текста может. . .
|