【发布时间】:2020-11-27 22:48:36
【问题描述】:
我正在尝试运行一个简单的示例 Delphi 10.4 FMX 程序,该程序根据 Android and Application.ProcessMessages 和 Does application.processmessages behaviour differ between VCL and FMX? 的建议取消了 Application.ProcessMessages()。
该按钮仅更新标签 3 次。继Background Operations on Delphi Android, with Threads and Timers 之后,它按预期工作,只需要一级更改,而不是两级更改。
有人能指出我做错了什么吗?我已将代码留下Application.ProcessMessages() 以显示所需的效果。
function Measure1sec(wait: integer): boolean;
var
sw: TStopwatch;
begin
sw := TStopwatch.StartNew;
while sw.ElapsedMilliseconds < wait do sw.ElapsedMilliseconds;
Result := TRUE;
end;
procedure TForm1.EndProgress(Sender: TObject);
var
Thread: TThread;
begin
Measure1sec(500);
label1.text := 'orange';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Thread: TThread;
begin
{
////////////////// Using Application.ProcessMessages //////////////
label1.text := 'apple';
// Application.ProcessMessages; // with this works without not
Measure1sec(500);
label1.text := 'orange';
// Application.ProcessMessages; // with this works without not
Measure1sec(500);
label1.text := 'done';
// Application.ProcessMessages; // with this works without not
Measure1sec(500);
}
////////////////// Using Threads //////////////////////////////////
Thread := TThread.CreateAnonymousThread(
procedure
begin
TThread.Synchronize(TThread.Current,
procedure
begin
label1.text := 'apple';
end
);
end
);
Thread.OnTerminate := EndProgress;
Thread.Start;
end;
【问题讨论】:
标签: multithreading delphi