![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
есть главная форма, в которой выполняется работа с базой. Параллельно, в отдельном потоке хочу выводить окно с прогрессбаром. Почему данный код не работает:
|
|||
|
||||
| ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Пручать основному потоку что-то сделать нужно очень в малых количествах и только если без этого действительно нельзя.
Это сообщение отредактировал(а) ivashkanet - 7.2.2007, 11:04 |
||||||
|
|||||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Тот же результат, появляется окно, но progressbar не бежит - мертвый
|
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Это называется чудеса на виражах: Прогрессбар бежит в отдельном потоке, а вот тяжелая работа идет в потоке формы Тебе нужно сделать наоборот: тяжелую работу вынести в отдельный поток, а прогресбар может даже бежать в той же самой форме |
||||
|
|||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Если не сложно, можно пример относительно данного случая
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Даааа, не так все было просто как мне казалось
Я бы не делал отдельную форму для прогрессбара, а поместил бы его в строку состояния, например. P.S. Приму любые замечания по коду. |
|||
|
||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Спасибо большое, огромный респект. По поводу примечания, а как запхать progressbar в строку состояния. Я даже ни разу с таким не сталкивался
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Не за что Примечания: 1) Форму с баром нужно сделать поверх приложения. ShowDialog() не подходит, так как ждет завершения работы формы. 2) При закрытии основной формы вылетает эксепшин на IncreasePBar()ю Решение --- закрывать вторую форму при закрытии первой. 3) Вместо второго потока (для прогресс бара) лучше использовать таймер Я тоже не пробовал. Но У MSDN, Word и др. эта хрень есть Так же можно попробовать вместо формы использовать usercontrol (прогрессбар и немного места вокруг него, как на Винграде) и делать ему BringToFront() |
|||
|
||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Можно в принципе вынести progressbar в statusStrip и юзать ее на форме. Но так как основным потоком должен идти какой-то процесс - не прогресс, я не знаю как мне в основном потоке циклически запустить прогресс и как его убить - как я узнаю, что основной процесс уже завершился?
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
||||
|
||||
| Berserk |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 14.12.2006 Где: Столица Донбасса - Горловка Репутация: нет Всего: 2 |
А если есть желание поработать с потоками, то можно кинуть на форму BackgroundWorker. Неплохо описано здесь. Можно код с примером скачать.
--------------------
|
|||
|
||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Решил проблему - вынес progressbar в statusStrip. Запускаю его по таймеру. А основной процесс в отдельном потоке. Когда основной процесс заканчивается - останавливаю таймер.
P.S. отдельная благодарность - ivashkanet. Без него бы не справился |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
maxnoskov, о, оно самое.
Для закрытия вопроса положи сюда код, а. |
|||
|
||||
| maxnoskov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Конечно, закрываю вопрос:
Единственная проблема - это то, что другие объекты на форме являются активными. Ну например меню. Если не хочется, чтобы во время операции пользователь совершал другие действия - ну не смотрит он на прогрессбар или не хоче смотреть. Надо эти элементы закрывать. Всем спасибо за помощь |
|||
|
||||
| maxnoskov |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 21.6.2006 Где: Мурманск Репутация: нет Всего: нет |
Да, с BackgroundWorker получилось даже красивее. Спасибо за ссылку.
А ларчик то просто открывается. В смысле проблемы нет - подвязываемся на FormClosing и делаем Enable = false для меню пока работает доп. поток Это сообщение отредактировал(а) maxnoskov - 15.2.2007, 14:32 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |