Форма зависает при загрузке данных в отдельном потоке - PullRequest
0 голосов
/ 30 марта 2011

Я использую компонент TIdHTTP для загрузки XML-данных из банка в отдельном потоке, но моя форма замерзает в это время ...

в чем может быть проблема?

У меня есть основная форма и класс потока, в классе потока у меня есть метод с именем loadData и в потоке :: Execute i Synchronize (loadData);

при нажатии кнопки я создал экземпляр класса потока, например testThread * t = new testThread (false);

и все

когда я нажимаю кнопку, основная форма зависает? даже отдельная тема не помогла ????

Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 31 марта 2011

Synchronize() выполняет ваш метод loadData() в контексте основного потока, а не в контексте вашего рабочего потока.Вот почему ваш основной поток блокируется, пока loadData() занят.Вы неправильно используете Synchronize(), делая вашу ветку бесполезной.Вам необходимо выполнить большую часть работы с потоком за пределами Synchronize(), а затем использовать Synchronize() только для выполнения небольших обновлений в основном потоке, когда это необходимо, например, для отображения статуса (даже тогда Synchronize() не всегда лучший выбордля этого).

...