【发布时间】:2021-02-08 17:03:23
【问题描述】:
在 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 中调用 Post?这完全违背了使用线程的目的。这不是您代码中的唯一问题......但它是核心问题
标签: android multithreading delphi post firemonkey