gpt4 book ai didi

multithreading - 工作线程启动时,FMX主线程中的动画停止

转载 作者:行者123 更新时间:2023-12-03 13:18:32 25 4
gpt4 key购买 nike

我的FireMonkey应用程序具有一个执行此操作的保存按钮:

procedure TFormProductionRuns.buSaveFinishProductClick(Sender: TObject);
begin
ShowActivity;
ITask(TTask.Create(
procedure
begin
try
TThread.Synchronize(nil,
procedure
begin
PostFinishProduct;
end);
finally
TThread.Synchronize(nil,
procedure
begin
HideActivity;
end);
end;
end)).Start;
end;
Activity 方法定义为:
procedure TFormProductionRuns.ShowActivity;
begin
frProgress1.ShowActivity;
end;

procedure TFormProductionRuns.HideActivity;
begin
frProgress1.HideActivity;
end;

procedure TfrProgress.ShowActivity;
begin
Self.Visible := True;
ProgFloatAnimation.Enabled := True;
end;

procedure TfrProgress.HideActivity;
begin
ProgFloatAnimation.Enabled := False;
Self.Visible := False;
end;
该框架设置为对齐内容,因此在可见时会填满整个应用程序屏幕,并包含“忙碌”动画。大部分工作是对post Web方法的REST请求。
procedure TFormProductionRuns.PostFinishProduct;
var
AList: TObjectList<TFinishedProduct>;
sReqBody, sResponse: String;
begin

...

sReqBody := TJSONUtils.ObjectsToJSONArray<TFinishedProduct>(AList).ToString;
RESTReqPostTransaction.Params.ParameterByName('ReqBody').Value := sReqBody;

RESTClient1.Params.ParameterByName('host_port').Value := FLoginInfo.Server + ':' + FLoginInfo.Port;
HTTPBasicAuthenticator1.Username := FLoginInfo.LoginId;
HTTPBasicAuthenticator1.Password := FLoginInfo.LoginPw;

try
RESTReqPostTransaction.Execute;
except on E:Exception do
begin
ShowMessage('Post Finish Product failed. Exception: ' + E.Message);
Exit;
end;
end;

sResponse := RESTResponseFromPost.Content;

...

end;
我发现的是,动画在处理此请求时停止,但是我的理解是,当工作线程正在等待响应时,主线程将继续运行。
该应用程序确实具有类似的方法,该方法使用 获取 REST请求而不是 Post ,并且在工作线程正在等待响应时为“忙”图形设置动画没有问题。

最佳答案

TThread.Synchronize是一种方法,该方法要求由同步参数中传递的方法的主线程执行。这实际上完全击败了多线程。
您必须设计线程,以便同步仅用于非常短的操作,例如更新用户界面或在工作线程和主线程之间传递数据,因为调用同步时,线程正在等待(已停止)该方法传入参数以由主线程执行。当主线程执行该方法时,它什么也不做(动画停止了)。

关于multithreading - 工作线程启动时,FMX主线程中的动画停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64109242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com