gpt4 book ai didi

Android 和 Application.ProcessMessages

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

我有一个应用程序,我将表单用作消息框,在这个“消息框”中,我运行线程来更改其上的消息线程完成后,在消息框上我显示按钮,只有在单击按钮代码后才能继续

var
FStart: TFStart;
VariableX:Boolean;

implementation

uses UApp,UMess;
{$R *.fmx}

procedure TFStart.Button2Click(Sender: TObject);
begin
VariableX:=false;
{
There i show window and start thread
after finish thread set VariableX as true
and close form
}
// There i need to wait until thread finish
while VariableX = false do Application.ProcessMessages;
{
there i will continue to work with data returned by thread
}
end;

我知道 Marco Cantu 说使用 Application.ProcessMessages 不是个好主意在我的例子中,应用程序以 sigterm 停止(在 windows 和 ios 上运行良好)

没有 Application.ProcessMessages 怎么办?

最佳答案

你不应该使用等待循环。因此,您根本不需要在任何平台上使用 ProcessMessages()

启动线程然后退出OnClick 处理程序返回到主UI 消息循环,然后让线程在需要更新UI 时向主线程发出通知。线程完成后,关闭窗体。

例如:

procedure TFStart.Button2Click(Sender: TObject);
var
Thread: TThread;
begin
Button2.Enabled := False;
Thread := TThread.CreateAnonymousThread(
procedure
begin
// do threaded work here...
// use TThread.Synchronize() or TThread.Queue()
// to update UI as needed...
end
);
Thread.OnTerminate := ThreadDone;
Thread.Start;
end;

procedure TFStart.ThreadDone(Sender: TObject);
begin
Close;
end;

关于Android 和 Application.ProcessMessages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775196/

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