【发布时间】:2013-05-30 06:48:18
【问题描述】:
我正在尝试将 indy TIdHttp 放入线程中, 我试过这个:
type
TSendThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
http : TIdHTTP;
URL : String;
Method : String;
property ReturnValue;
end;
procedure TSendThread.Execute;
begin
form1.Memo1.lines.Add(http.Get(URL));
ReturnValue := 1;
end;
主要是:
procedure TForm1.Button1Click(Sender: TObject);
var t : TSendThread;
begin
t := TSendThread.Create(true);
t.URL := 'http://www.url.com/';
t.http := http;
t.Start;
showmessage(IntToStr(t.ReturnValue));
end;
我的问题是下一条指令在没有等待线程完成的情况下被执行(showmessage),我尝试使用“WaitFor”但它冻结了应用程序。
还有其他解决方法吗?
谢谢。
【问题讨论】:
-
如果您正在“等待它”完成,则无需首先将其放入线程中。线程用于在后台执行,以便 UI 不必 等待。
-
@Benjamin:如果您必须使用
ProcessMessages,那么您现在添加了一个新问题。这从来都不是正确的解决方案。 -
ProcessMessages谨慎使用是可以的 -
@OnTheFly-ProcessMessages 可能导致意外行为。特别是在使用 TTimer 的冻结应用程序中使用时。
标签: multithreading delphi indy