我使用httpd从互联网上请求一些数据
function requestToServer(lParamList: TStringList) : string;
var
userDataString : string;
lHTTP: TIdHTTP;
serverResponce : string;
aobj: ISuperObject;
begin
application.ProcessMessages;
TThread.CreateAnonymousThread(
procedure
begin
lHTTP := TIdHTTP.Create(nil);
try
serverResponce := lHTTP.Post('http://domain.com/mjson.php', lParamList);
application.ProcessMessages;
aobj:= SO(serverResponce);
try
X := aobj['dta'].AsArray;
Except
form2.Memo1.Lines.Add('errr');
end;
if aobj['result'].AsString = 'lr_102' then
begin
form2.Label3.Text:='Saved token expired.';
form2.Rectangle2.Visible:=true;
end
else if aobj['result'].AsString = 'lr_103' then
begin
form2.Label3.Text:='Auto login.';
//load device data
form2.allDeviceListData := X;
form2.Hide;
form1.show;
end;
// globalReachedServer:=true;
finally
lHTTP.Free;
lParamList.Free;
end;
TThread.Synchronize(nil,
procedure
begin
end);
end
).Start();
end;
但达到此功能后 应用程序显示黑页,并且在手动关闭之前不执行任何操作
我怎样才能在后台进行网络请求,而不是挂在火猴身上! 什么回合使用REST是否更好地访问Web服务?
答案 0 :(得分:2)
您的代码不是线程安全的。您的线程直接访问UI控件而不与主UI线程同步。仅此一点就可能导致问题。
此外,var
的{{1}}部分中声明的所有变量都应该移到匿名过程的requestToServer()
部分,因为var
不使用它们,所以它们可以完全是本地的线程。匿名过程应该捕获的唯一内容是requestToServer()
内容。
尝试更像这样的事情:
lParamList