|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.03.2012, 08:05 | #1 |
Пользователь
Регистрация: 27.11.2010
Сообщений: 18
|
Поток (Thread) не хочет показывать панель (Panel).
Здравствуйте!
Вообщем имеется вот такой код потока: Код:
Код:
P.S. Delphi XE2 Последний раз редактировалось rpy3uH; 30.03.2012 в 15:20. |
30.03.2012, 09:39 | #2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Гм, я в недоумении: по какому принципу вы делите код на код, нуждающийся в синхронизации, и не нуждающийся в ней? Почему простейшие действия вроде изменения Enabled вы заворачиваете в Synchronize, а тяжеловесы вроде FormMain.ListBoxViewMail.Clear или FormMain.ListBoxViewMail.Items.Add - нет?
Из вторичного потока НЕЛЬЗЯ обращаться к визуальным компонентам. Поэтому, заворачивайте в Synchronize любой код, который обращается к формам и компонентам на ней.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
30.03.2012, 09:44 | #3 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Я вообще изменил бы логику работы.
Код:
Код:
Код:
Цитата:
Иными словами, поток вообще не должен ссылаться на форму. Почитайте: http://www.gunsmoker.ru/2010/08/9897.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
30.03.2012, 10:13 | #4 |
Пользователь
Регистрация: 27.11.2010
Сообщений: 18
|
GunSmoker, Я Synchronize вообще не использовал и без него прекрасно работает, ведь поток у меня один, а Synchronize нужен для синхронизации нескольких (вроде бы). Где-то прочитал, что весь код касаемо основной формы должен обрабатываться через Synchronize, подумал может мне это поможет, но увы. Сейчас вынесу все за пределы потока, т.е. перепишу код . Просто с потоками вообще не имел дело, а тут не дело же что все виснет, решил попробовать.
|
30.03.2012, 10:34 | #5 |
Форумчанин
Регистрация: 25.08.2010
Сообщений: 258
|
Synchronize используется и для синхронизации с компонента! Видите ли, потоки плоховато работают с VCL поэтому нужно использовать Synchronize. Не верите -
напишите в Execute потока Showmessage и не ставте Synchronize и он вам будет так извращатся над тем Showmessage) |
30.03.2012, 12:26 | #6 | |
Пользователь
Регистрация: 27.11.2010
Сообщений: 18
|
Цитата:
Итак, вообщем я попытался вытащить весь код что обращается к форме из потока, получилось следующее: Код потока: Код:
Код:
Код:
Последний раз редактировалось rpy3uH; 30.03.2012 в 15:21. |
|
30.03.2012, 12:30 | #7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Тебе поток, по сути, нужен, чтобы не подвисал интерфейс программы во время вызова GET. А раз так, то глянь сюда: http://www.delphikingdom.ru/asp/view...catalogid=1355
У тебя будет: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
30.03.2012, 14:57 | #8 | |
Пользователь
Регистрация: 27.11.2010
Сообщений: 18
|
Цитата:
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамичная панель - Можно ли сделать так чтобы панель или любой элемент, выдвигались при наведении | IHaveQuestions | Компоненты Delphi | 7 | 30.11.2011 09:49 |
Поток. Не получается создать поток. Выдает ошибки при запуске | bigory | Общие вопросы по Java, Java SE, Kotlin | 3 | 23.09.2010 00:40 |
Thread.Приложение не отвечает. Не запускается поток. | Zerofill | Общие вопросы Delphi | 2 | 10.10.2009 16:04 |
Показывать-не показывать скрытые файлы и папки... | Романнн | Свободное общение | 5 | 07.11.2007 13:16 |