В моей программе просмотра манги я пытаюсь загрузить большое количество изображений (около 200), я пытаюсь загрузить эти изображения в anonymous thread
, и когда загрузка заканчивается, я вызываю Thread.synchronize
, это работает нормально, но в некоторыхслучаи, когда я продолжаю видеть некоторые изображения, не нарисованные в форме (я думаю, они загружены, потому что я вижу информацию об изображении), как я могу решить эту проблему?
Эта проблема возникает только в multi thread
, поэтому ярешил установить изображение видимым в false и затем в конце загрузки внутри Thread.synchronize
повернуть видимое в true, я надеялся, что это приведет к некоторому обновлению или перерисовке, но упомянутая проблема состоит в
TThread.CreateAnonymousThread(procedure
begin
for imageIndex := 0 to fileList.count - 1 do
begin
filePath := fileList[imageIndex]
//Please note that mImageList is an array of FMX.Objects.TImage
//which was filled when the Form is created (I create 300 TImage
//at Form create and later i load the images to the bitmap when
//the user clicks on a new directory(Chapter)
mImageList[imageIndex].beginUpdate();
try
mImageList[imageIndex].loadFromFile(filePath);
mImageList[imageIndex].tagString := filePath;
mImageList[imageIndex].Scale := mImageScale;
mImageList[imageIndex].Visible := false;
except
mImageList[imageIndex].EmptyBitmaps;
end;
mImageList[imageIndex].endUpdate();
end;
TThread.Synchronize(nil, procedure
var
I: Integer;
begin
for I := Low(mImageList) to High(mImageList) do
begin
mImageList[I].Visible := true;
end;
end);
end).Start;
Я ожидаю, что когда я прокручиваю вниз изображения, загруженные в форму, я вижу их все, и все они правильно отображаются в форме.