У меня есть массив, содержащий данные, которые будут представлены в 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;