Ich versuche, ein indy TIdHttp in einem Thread zu setzen, haben ich das versucht:für Gewinde Warten ohne Einfrieren der Anwendung
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;
Und im Haupt:
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;
Mein Problem Hier ist, dass die nächste Anweisung ausgeführt wird (showmessage), ohne den Thread zu warten, ich habe versucht, die "WaitFor" zu verwenden, aber es friert die Anwendung ein.
Gibt es eine andere Problemumgehung?
Vielen Dank.
Wenn Sie „warten, dass es“ zu beenden, gibt es keine Notwendigkeit, sie in einem Thread an erster Stelle zu setzen. Threads werden im Hintergrund ausgeführt, sodass die Benutzeroberfläche nicht * warten muss. –
@Benjamin: Wenn Sie 'ProcessMessages' verwenden müssen, haben Sie jetzt ein neues Problem hinzugefügt. Es ist ** nie ** die richtige Lösung. –
'ProcessMessages' ist OK, wenn mit Vorsicht verwendet wird – OnTheFly