Ich finde zu WorkerThreadPool nichts. Ich habe die Bilder nicht im Speicher liegen. Denn das kostet schließlich am meisten Zeit. Beim Laden und Generieren lässt sich nichts mehr verbessern denke ich. Was wäre also am sinnvollsten ? Ich habe außerdem folgenden leicht fehlerhaften Code geschrieben, welcher wenigstens mal etwas funktioniert. Scheinen aber wirklich Fehler drinnen zu sein, die ich gerade nicht finde - gewisse Bilder sind einfach schwarz, wechselt man das Verzeichnis (ist ein Dateiverwaltungsprogramm) werden die Bilder nicht neu geladen usw. Scheint aber am ThumbnailDone zu liegen. Ich habe das Gefühl, es sei allgemein aber noch etwas instabil.
Delphi-Quellcode:
type
TDone =
procedure (Items : TDynItemArray)
of object;
TThumbnailThread =
class(TThread)
private
fDone : TDone;
procedure SyncDone;
protected
procedure Execute;
override;
public
Items : TDynItemArray;
Img : TImageList;
property Done : TDone
read fDone
write fDone;
end;
procedure TThumbnailThread.Execute;
var i : Integer;
Picture : TPicture;
Bmp : TBitmap;
begin
try
for i := 0
to High(Items)
do
begin
try
Picture := TPicture.Create;
Picture.LoadFromFile(Items[i].Pfad+Items[i].
Name);
Bmp := TBitmap.Create;
with Bmp
do
begin
...
Img.Add(Bmp,
nil);
Items[i].ImageIndex := Pred(Img.Count);
Free;
end;
except
end;
SyncDone;
end;
except
on e:
exception do
begin
end;
end;
end;
procedure TThumbnailThread.SyncDone;
begin
if Assigned(fDone)
then
fDone(Items);
end;
procedure TRazFileManager.LoadThumbnails;
var Thread : TThumbnailThread;
begin
Thread := TThumbnailThread.Create(True);
with Thread
do
begin
Items := Thumbnails;
Img := Img32;
Done := ThumbnailDone;
Resume;
end;
end;
procedure TRazFileManager.ThumbnailDone(Items : TDynItemArray);
var i : Integer;
begin
for i := 0
to High(Items)
do
DirsFiles[DirCount+Items[i].
Index].ImageIndex := Items[i].ImageIndex;
end;
Edit: habe einen wichtigen Fehler gefunden und beseitigt. Nun scheint es ganz gut zu laufen.