Delphi FMX - HTTPS POST with AniIndicator



在Android上,当我在Indy https发布功能中触摸屏幕时"应用程序没有响应";出现。我不想看到它。我想在加载数据时显示AniIndicator动画,而不让主线程忙碌。

我的代码:

function TFormMain.LoginChecker(iphttp: TIdHTTP): Boolean;
var
s: string;
Thread1: TThread;
begin
Thread1 := TThread.CreateAnonymousThread
(
procedure
begin
TThread.Synchronize(Thread1,
procedure
begin
s := iphttp.Post(ServerRoot + 'lc.php', TStream(nil));
end);
end);
Thread1.Start;
if Thread1.Finished then
begin
try
if s = '1' then
Result := True
else
Result := False;
except
Result := False;
end;
end;
end;
procedure TFormMain.Button2Click(Sender: TObject);
var
Thread1: TThread;
Logined: Boolean;
begin
try
AniIndicator1.Visible := True;
AniIndicator1.Enabled := True;
TabControl1.Visible := False;
Logined:= LoginChecker(IdHTTP1);
if Logined then
ShowMessage('Yes!')
else
ShowMessage('No');
finally
AniIndicator1.Visible := False;
AniIndicator1.Enabled := False;
TabControl1.Visible := True;
end; 

您正在向主线程执行Synchronize()'TIdHTTP.Post()操作,该操作将阻塞您的UI,直到HTTP操作完成。不要那样做。创建工作线程的全部目的是在另一个线程中运行代码。因此,让线程正常运行,并在有值得报告的事情时通知主线程。

试试类似的东西:

function TFormMain.BeginLogin;
begin
AniIndicator1.Visible := True;
AniIndicator1.Enabled := True;
TabControl1.Visible := False;
TThread.CreateAnonymousThread(
procedure
var
Logined: Boolean;
begin
Logined := False;
try
Logined := (IdHTTP1.Post(ServerRoot + 'lc.php', TStream(nil)) = '1');
finally
TThread.Queue(nil,
procedure
begin
LoginFinished(Logined);
end
);
end;
end
).Start;
end;
procedure TFormMain.LoginFinished(Logined: Boolean);
begin
if Logined then
ShowMessage('Yes!')
else
ShowMessage('No');
AniIndicator1.Visible := False;
AniIndicator1.Enabled := False;
TabControl1.Visible := True;
end; 
procedure TFormMain.Button2Click(Sender: TObject);
begin
BeginLogin;
end;

相关内容

  • 没有找到相关文章

最新更新