|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.05.2010, 16:05 | #1 |
Новичок
Джуниор
Регистрация: 06.05.2010
Сообщений: 2
|
работа с Windows Form
Здравствуйте.
Подскажите, пожалуйста,... Я создаю приложение в Visual Studio C++ 2008 и столкнулся со следующей проблеммой: мое приложение работает с Windows Form (CLR-приложение), после того, как я запущу приложение, оно выполняет определенный код, который занимает некоторое время, на форме расположены индикаторы выполнения кода (такие скажем, как ProgressBar), все они нормально работают и все отображают, если я ее не трогаю, и она активна, но если я переключаюсь на другие приложения или, скажем, пытаюсь использовать какие-либо элементы управления, которые есть на форме, то моя форма становится белого цвета, и появляется всем известная надпись: "приложение не отвечает". Оно не отвечает до того момента, пока не выполнится код. Главная форма в процессе работы вызывает другую форму (не в модальном режиме), которая в свою очередь и выполняет основной код, на кот. и расположены необходимые элементы управления, виснут обе формы. Я ставил такой оператор в исполняемом цикле: testDialog->Refresh(); где testDialog - есть побочная форма, но это не помогло. Скажите, пожалуйста, как сделать так, чтобы были доступны элементы управления на форме во время исполнения кода, чтобы форма не висла. Заранее спасибо. Извините, если сложно написал... |
06.05.2010, 16:54 | #2 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Используй потоки.
|
07.05.2010, 23:55 | #3 | ||
Пользователь
Регистрация: 19.08.2009
Сообщений: 47
|
Решение без отдельного потока
Windows Forms приложения работают на основе так называемых ‘сообщений’, которые накапливаясь, помещаются в ‘очередь сообщений’ потока, клики мышью – это тоже сообщения, которые должны быть соответствующим образом обработаны. В приведенном случае, когда выполняется продолжительный код – новые сообщения не могут обрабатываться по причине того, что еще не завершил свою работу текущий обработчик, т. е. любые сообщения от мыши, клавиатуры, перерисовки и т. д. в момент обработки текущего сообщения не обрабатываются, что особенно хорошо заметно на длительных операциях. Чтобы дать возможность обработать сообщения, ожидающие в данный момент в очереди, в длительный цикл/код нужно вставить вызов метода Application.DoEvents(). Пример: Цитата:
Код:
Использую сам WindowsFormsApplicationBase.DoEvent s - метод Цитата:
Учиться никогда не поздно
Последний раз редактировалось Kottik; 08.05.2010 в 00:18. |
||
10.05.2010, 12:09 | #4 |
Новичок
Джуниор
Регистрация: 06.05.2010
Сообщений: 2
|
Гениально! Спасибо, Kottik!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Требуется программист C# Windows Form | rvn | Фриланс | 5 | 13.03.2011 15:33 |
Книга по Windows Form Application | Skynet91 | Общие вопросы C/C++ | 0 | 20.03.2010 08:51 |
C# Windows Form | rvn | Фриланс | 4 | 26.01.2010 04:23 |
рисование астроиды (VC++ windows form aplication) | vo_sa | Общие вопросы C/C++ | 1 | 23.11.2009 00:48 |