Hi Leute!
ich bin mir bei meinem aktuellen Thema nicht ganz sicher wie ich es angehen soll. Folgende Voraussetzung:
Ich habe eine eigene Klasse mit dem Vorfahren TThread. Diese Klasse besitzt eine Public-Eigenschaft WindowList vom Typ TStringList. Der Thread aktualisiert diese Liste fortlaufend in seiner Execute-Methode.
Nun möchte ich mit meiner Anwendung den Inhalt der Liste abholen. Ich habe den Verdacht, dass das so einfach nicht geht wenn ich die Liste öffentlich mache und dann durch die Items iteriere um alles auszulesen. Mein Thread könnte da ja was in der Zwischenzeit ändern. Ein Ereignis mittels Synchronize will ich aber auch nicht aus dem Thread losschicken, da es nicht nötig ist die Anwendung zu informieren.
Hier mal der Code zur Klassendeklaration:
Delphi-Quellcode:
type
TShutDownThread = class(TThread)
private
FWindowList : TWindowList; // Liste der aktiven Fenster
FShutDownList : TShutDownList; // Schließliste
function GetWinParamObj(index: Integer): TWinParamClass;
function GetShutDownObj(index: Integer): TWinParamClass;
protected
procedure Execute; override;
procedure UpdateWindowList; // Fensterliste aktualisieren
public
constructor Create(CreateSuspended: Boolean); reintroduce; virtual;
property ShutDownList : TShutDownList read FShutDownList;
property ShutDownObj [index : Integer] : TWinParamClass read GetShutDownObj;
property WindowList : TWindowList read FWindowList;
property WinParamObj [index : Integer] : TWinParamClass read GetWinParamObj;
end;
Ich glaube, dass sollte Ärger geben:
Delphi-Quellcode:
For Counter := 0 to ShutDownThread.WindowList.Count - 1 do begin
Obj := ShutDownThread.WindowList.Objects[Counter];
... und dann lesen wir schön aus und zeigen an
end;
Sorry, hab grad versehentlich den absenden Button gedrückt. Hier noch schnell der Rest.
Ich dächte, dass geht in die Hose. Die Frage ist nun, wie sollte ich die Items threadsicher aus dem Thread holen?
Gruß oki
[edit] nach Hinweis von sirius Fehler im Code gefixt! [/edit]