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中,然后启用一个定时器来设置标签文本的值,我解决了这个问题。
发布于 2018-11-06 20:13:05
通常,Delphi事件是在主线程(UI控件)内触发的,或者是与主线程(TThread.OnTernimate -事件)同步的。然而,情况并不总是如此。
绑定从后台线程运行,它的事件也从后台线程调用。另一方面,所有UI访问必须与主UI线程同步。
TTetheringProfile类(TTetheringAppProfile的祖先)具有SynchronizeEvents属性(默认设置为True),该属性控制调用哪个线程的事件。如果True,所有事件处理程序都将在主线程的上下文中运行。
您所出现的症状与从辅助线程访问UI是一致的。检查SynchronizeEvents属性值或将UI访问与事件处理程序中的主线程同步。
https://stackoverflow.com/questions/53178413
复制相似问题