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

Multithreading 如何防止冻结MainForm并等待子线程返回值,multithreading,delphi,delphi-7,tthread,Multithreading,Delphi,Delphi 7,Tthread,我有一个下载xml文件的线程,这个xml文件我想在其他类中解析。现在我已经准备好了线程,在那里我可以下载它。 在MainForm中,我使用的是WaitForSingleObject,但是这个函数冻结MainFrom,那么如何防止冻结和等待值呢? 谢谢。在主线程上等待实际上不是一个好的设计,但在某些情况下可能是必要的。但是,在等待时,仍然需要处理到达线程的消息 看看MSDN。首先,用事件设计线程,并使用同步调用它们 在MainForm中创建线程并为其分配事件处理程序: Thread := TMyT

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

在主线程上等待实际上不是一个好的设计,但在某些情况下可能是必要的。但是,在等待时,仍然需要处理到达线程的消息


看看MSDN。

首先,用事件设计线程,并使用同步调用它们

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

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

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

不要在主线程中等待。安排工作线程向主线程发送消息,以通知主线程工作已完成。为此,应使用windows消息,请参阅相关问题TThread类有一个同步方法(基于windows消息)。我同意;我的主要目标是将值(本例中为xml)返回到MainForm。我不在乎我是否使用一个线程等待…:)我认为Boris Treukhlov的链接是有帮助的…最后我用这种方式做了,现在当我想用MSXML2_TLB解析XML文档时,我陷入了死锁。。。。关键字已同步我已使用…:/有什么建议吗?第xmldoc行中的死锁开始:=t.DefaultInterface;在
t:=TDomDocument40.Create中(nil);xmldoc:=t.DefaultInterface