0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
||||||
1 | ||||||
Показать результаты итераций на отдельной форме10.10.2015, 02:59. Показов 1820. Ответов 8
Метки нет (Все метки)
Приветствую!
Допустим, есть процедура, в которой есть цикл, выполняющийся достаточно долгое время. Хочется сделать так, чтобы перед началом цикла открылась некоторая вторая форма, в которой есть, например, ListBox. По завершении каждой итерации цикла предполагается добавление новой строки в ListBox. При этом, основная форма "блокируется" (так как в ней выполняется сам цикл - их не предполагается выполнять в отдельных потоках), однако вторая форма должна быть активной и доступной для использования. Пример:
0
|
10.10.2015, 02:59 | |
Ответы с готовыми решениями:
8
Как сверить результаты итераций цикла? ProgressBar в отдельной форме БД. Добавление в отдельной форме Изменение в отдельной форме |
3675 / 2587 / 718
Регистрация: 02.08.2011
Сообщений: 6,955
|
|
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
|
3675 / 2587 / 718
Регистрация: 02.08.2011
Сообщений: 6,955
|
|
10.10.2015, 04:17 | 4 |
А не, не тут то было). Сначала выполняется цикл в потоке первой формы, затем, даже если была подписка, пачкой заполняется листбокс. А почему нельзя использовать рабочие потоки? Гарантированно будет работать.
0
|
0 / 0 / 0
Регистрация: 07.07.2014
Сообщений: 14
|
|
10.10.2015, 04:28 [ТС] | 5 |
"...А почему нельзя использовать рабочие потоки? Гарантированно будет работать."
BackgroundWorker? Если да, то у меня по крайней мере не взлетело (но я вполне допускаю, что криво использовал). На всякий случай еще нюанс - процессы Run() я не хочу запускать отдельными потоками, а именно вторую форму.
0
|
3675 / 2587 / 718
Регистрация: 02.08.2011
Сообщений: 6,955
|
|||||||||||
10.10.2015, 04:48 | 6 | ||||||||||
В том то и дело, что рабочие потоки на то и рабочие, используются для вычислительных операций.
Вот что-то похожее на правду, но все равно кривое решение - так не делают. Application.DoEvents рулит). Код первой формы:
Поэтому явно заставляем диспетчер обработать сообщения для потока другого окна. Добавлено через 3 минуты Но чтобы блокировать первую форму, нужно вторую открывать в диалоговом режиме и уже из второй формы запускать рабочий поток и отображать результат.
0
|
6508 / 4085 / 1605
Регистрация: 09.05.2015
Сообщений: 9,551
|
|
10.10.2015, 04:48 | 7 |
Сообщение было отмечено balalexv как решение
Решение
А так не прокатит (см вложение)?
1
|
3675 / 2587 / 718
Регистрация: 02.08.2011
Сообщений: 6,955
|
|
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 показать результаты ошибок соединение отдельно Редактирование данных в отдельной форме Фильтрация записей в отдельной форме Вывести ответ в отдельной форме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |