首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi绑定ResourceReceived未能更新TLabel

Delphi绑定ResourceReceived未能更新TLabel
EN

Stack Overflow用户
提问于 2018-11-06 19:07:27
回答 1查看 124关注 0票数 2

Delphi 10.2.3 FMX应用程序绑定

有时,以下代码中的标签会更新,但通常不会更新。在绑定RescourceReceived过程中更新可视化组件不安全吗?

代码语言:javascript
复制
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中,然后启用一个定时器来设置标签文本的值,我解决了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 20:13:05

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

绑定从后台线程运行,它的事件也从后台线程调用。另一方面,所有UI访问必须与主UI线程同步。

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53178413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档