gpt4 book ai didi

Delphi 网络共享 ResourceReceived 无法更新 TLabel

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

Delphi 10.2.3 FMX 应用程序网络共享

有时以下代码中的标签会更新,但通常不会更新。在网络共享 RescourceReceived 过程中更新可视组件是否不安全?

procedure TMainForm.MyTetheringAppProfileResourceReceived(
const Sender: TObject; const AResource: TRemoteResource);

begin
if AResource.Hint = 'InfoPrincipleVariation'
then
begin

MyInformationLabel.Text := AResource.Value.AsString; // Fails to update
Exit;
end;
end;

我通过将值存储在 AResource.Value.AsString 中,然后启用一个计时器来稍后设置标签文本的值,从而解决了这个问题。

最佳答案

通常,Delphi 事件在主线程(UI 控件)内触发或与主线程同步(TThread.OnTernimate - 事件)。但情况并非总是如此。

网络共享从后台线程运行,其事件也从后台线程调用。另一方面,所有 UI 访问都必须与主 UI 线程同步。

TTetheringProfile 类(TTetheringAppProfile 的祖先)具有控制的 SynchronizeEvents 属性(默认设置为 True)在哪个线程上调用事件。如果True,所有事件处理程序都将在主线程上下文中运行。

您遇到的症状与从辅助线程访问 UI 一致。检查 SynchronizeEvents 属性的值或将 UI 访问与事件处理程序中的主线程同步。

关于Delphi 网络共享 ResourceReceived 无法更新 TLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178413/

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