我有一个数组保存数据将在 TVirtualStringTree 上表示。这个数组是线程安全的和可锁定的。并由另一个线程增长。
我的问题是,当 VST 执行 OnMeasureItem 事件来测量节点的高度时,用于测量的数据在使用 OnGetText 事件打印数据时会发生变化。
我检查了事件的执行顺序,这对我的设计不利。首先它为所有未初始化的节点触发 OnMeasureItem 事件,然后它开始调用 OnGetText 事件。我的意思是,假设我们有 3 个节点,事件将按该顺序触发:
OnMeasureItem for node 1
OnMeasureItem for node 2
OnMeasureItem for node 3
OnGetText for node 1
OnGetText for node 2
OnGetText for node 3
但我需要这样的东西才能锁定:
OnMeasureItem for node 1
OnGetText for node 1
OnMeasureItem for node 2
OnGetText for node 2
OnMeasureItem for node 3
OnGetText for node 3
保持 OnMeasureItem 和 OnGetText 事件之间获得的数据同步的最佳方法是什么?
我不想在所有 OnMeasureItem() 和 OnGetText() 事件期间锁定我的数组。
谢谢你。
添加了onTimer:
procedure TMainForm.SyncHexLog;
begin
HexLog.BeginUpdate;
Try
if (HexLog.RootNodeCount <> FirpList.ComOperationCountLagged) then
begin
HexLog.RootNodeCount := FirpList.ComOperationCountLagged;
// measure for fast scrolling
HexLog.ReInitNode(HexLog.GetLastNoInit(), True);
if FAutoScroll then
begin
HexLog.ScrollIntoView(HexLog.GetLast, False, False);
end;
end;
Finally
HexLog.EndUpdate;
End;
end;