Niemals unsynchronisiert aus einem Thread heraus auf
VCL-Controls zugreifen, das ist eine uralte Weisheit.
Delphi-Quellcode:
procedure TfrmMain.StartIcons();
begin
TThread.CreateAnonymousThread(procedure ()
var
LIcon: TIcon;
I: Integer;
dummy: Word;
begin
dummy := 0;
LIcon := TIcon.Create;
LIcon.Transparent := True;
try
lvFiles.Update;
FileIcons.BeginUpdate;
for i := 0 to lvFiles.Items.Count -1 do
begin
begin
LIcon.Handle := ExtractAssociatedIcon( hInstance, PWideChar( lvFiles.Items.Item[ i ].Caption ), dummy );
LIcon.Transparent := True;
end;
TThread.Synchronize (TThread.CurrentThread, procedure ()
begin
lvFiles.Items.Item[ i ].ImageIndex := FileIcons.AddIcon( LIcon );
end);
DestroyIcon( LIcon.Handle );
end;
finally
FileIcons.EndUpdate;
LIcon.Free;
end;
end).Start;
end;
Danke, ich habe es auf diese Weise korrigiert aber das Problem besteht immer noch, ich finde meinen Fehler nicht.