Zitat von
romber:
Der Thread kann dan problemlos auf den Item zugreifen und Daten ändern.
Wie kann ich im Thread überprüfen, ob Item in der ListView noch vorhanden ist, ich meine noch nicht gelöscht wurde?
Andersrum wird ein Schuh draus.
Beim Löschen eines Items musst du 1.)
den Thread terminieren und 2.) den Thread freigeben (falls du
FreeOnTerminate nicht gesetzt hast)
Delphi-Quellcode:
procedure DelItem(Item: TListItem);
var
Thread: TThread;
begin
Thread:=TThread(Item.Data);
if Assigned(Thread) then
begin
Thread.Terminate;
Thread.Free; // nur wenn FreeOnTerminate=False
end;
end;
Im Thread musst du obacht geben und nur auf das Item zugreifen, wenn der Thread noch nicht Terminiert ist:
Delphi-Quellcode:
if Terminated then
Exit; // Execute verlassen, wenn Thread terminiert ist
// Thread ist nicht terminiert, also darf ich auf das Item zugreifen
FItem.Caption := 'working ' +IntToStr(x);