如何防止冻结MainForm并等待子线程的返回值

时间:2012-07-02 11:01:24

标签: multithreading delphi delphi-7 tthread

我有线程在哪里下载xml文件我要在其他类中解析这个xml文件。现在我准备了线程,我可以下载它。 在MainForm我使用WaitForSingleObject,但是这个函数冻结了MainFrom,那么如何防止reezing并等待值呢? 感谢。

2 个答案:

答案 0 :(得分:2)

首先,使用事件设计线程并使用Synchronize调用它们。

在MainForm中创建线程并为其分配事件处理程序:

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

你不应该在MainForm中等待。避免使用Windows消息方法,因为您的应用程序将失去平台可移植性,只是链接到WinXX编译。

答案 1 :(得分:0)

等待主线程并不是一个好的设计,但在某些情况下它可能是必要的。但是,在等待时,您仍然需要处理进入该线程的消息。

在MSDN上查看MsgWaitForMultipleObjects