У меня есть нить, где загрузка xml-файла в этот xml-файл я хочу анализировать в другом классе. Теперь я подготовил нить, где я могу ее скачать. В MainForm я использую WaitForSingleObject, но эта функция замораживает MainFrom, так как я могу предотвратить reezing и ждать значения? Спасибо.Как предотвратить замораживание MainForm и дождаться значения возвращаемого значения из вспомогательного потока
ответ
Сначала создайте поток с помощью событий и вызовите их, используя Synchronize.
Создать нить в MainForm и назначать обработчики событий к нему:
Thread := TMyThread.Create(True);
Thread.OnDownload := DoDownload;
Thread.OnParse := DoParse;
// Other Events
Thread.Start;
Вы не должны WaitFor * в MainForm. Избегайте метода сообщений Windows, потому что ваше приложение потеряет переносимость платформы, просто связанное с компиляцией WinXX.
В конце я делаю это таким образом, будьте теперь, когда я хочу разобрать XML-документ MSXML2_TLB Я в тупике .... Ключевые слова Синхронизированный Я использую ...:/Любой совет? Запуск тупика в строке _xmldoc: = t.DefaultInterface; _ в 't: = TDomDocument40.Create (nil); xmldoc: = t.DefaultInterface; ' – user1444155
Это не очень хороший дизайн, чтобы ждать на главной теме, но в некоторых случаях это может быть необходимо. Однако, пока вы ждете, вам все равно нужно обрабатывать сообщения, поступающие в поток.
Посмотрите на MsgWaitForMultipleObjects на MSDN.
Согласен; моя главная цель - получить значение (xml в этом случае) обратно в MainForm. Мне все равно, если я буду использовать еще один поток для ожидания ... :) Я думаю, что ссылка Бориса Трехулова может быть полезна ... – user1444155
Не ждите в основной теме. Расположите рабочий поток, чтобы отправить сообщение в основной поток, чтобы уведомить главный поток, что работа выполнена. –
Вы должны использовать сообщения Windows для таких целей, см. Соответствующий вопрос http://stackoverflow.com/questions/4377677/assigning-a-panel-to-each-thread-delphi –
Класс TThread имеет метод синхронизации (на основе Windows сообщений) для этой цели. –