2012-07-02 1 views
1

У меня есть нить, где загрузка xml-файла в этот xml-файл я хочу анализировать в другом классе. Теперь я подготовил нить, где я могу ее скачать. В MainForm я использую WaitForSingleObject, но эта функция замораживает MainFrom, так как я могу предотвратить reezing и ждать значения? Спасибо.Как предотвратить замораживание MainForm и дождаться значения возвращаемого значения из вспомогательного потока

+3

Не ждите в основной теме. Расположите рабочий поток, чтобы отправить сообщение в основной поток, чтобы уведомить главный поток, что работа выполнена. –

+3

Вы должны использовать сообщения Windows для таких целей, см. Соответствующий вопрос http://stackoverflow.com/questions/4377677/assigning-a-panel-to-each-thread-delphi –

+0

Класс TThread имеет метод синхронизации (на основе Windows сообщений) для этой цели. –

ответ

2

Сначала создайте поток с помощью событий и вызовите их, используя Synchronize.

Создать нить в MainForm и назначать обработчики событий к нему:

Thread := TMyThread.Create(True); 
Thread.OnDownload := DoDownload; 
Thread.OnParse := DoParse; 
// Other Events 
Thread.Start; 

Вы не должны WaitFor * в MainForm. Избегайте метода сообщений Windows, потому что ваше приложение потеряет переносимость платформы, просто связанное с компиляцией WinXX.

+0

В конце я делаю это таким образом, будьте теперь, когда я хочу разобрать XML-документ MSXML2_TLB Я в тупике .... Ключевые слова Синхронизированный Я использую ...:/Любой совет? Запуск тупика в строке _xmldoc: = t.DefaultInterface; _ в 't: = TDomDocument40.Create (nil); xmldoc: = t.DefaultInterface; ' – user1444155

0

Это не очень хороший дизайн, чтобы ждать на главной теме, но в некоторых случаях это может быть необходимо. Однако, пока вы ждете, вам все равно нужно обрабатывать сообщения, поступающие в поток.

Посмотрите на MsgWaitForMultipleObjects на MSDN.

+0

Согласен; моя главная цель - получить значение (xml в этом случае) обратно в MainForm. Мне все равно, если я буду использовать еще один поток для ожидания ... :) Я думаю, что ссылка Бориса Трехулова может быть полезна ... – user1444155