Hi,
die CriticalSection hab ich erst hinzugefügt, als ich gemerkt habe dass meine Schleife nicht vollständig durchlaufen wird. Vorher gings aber auch nicht.
das FTCPClient.IOHandler.InputBuffer.ExtractToString wird mit dem Fehler wohl nichts zu tun haben, denn mein Problem entsteht ja schon vorher.
ich kann auch mit 100%Prozentiger Sicherheit sagen, dass sich an meinem ListView während der Thread gestartet wird nicht verändert. Dieses wird aufgebaut, bevor der Thread gestartet wird und auch keiner Stelle im Prog verändert.
Interessant finde ich, dass
1. Auf dieses erste Item im LV ohne Fehler zugegriffen werden kann.
2. Auch der korrekte String gelesen wird
3. und diese auch von IdTCPClient korrekt versendet wird.
Nur warum es dann nicht weiter geht, das ist mir ein Rätsel.
Da du im Execute keinerlei Exceptions verarbeitest, solltest du das dringend machen.
Try-Except drumrum und die
Exception anzeigen.
Tipp: TThread hat ein OnTerminate-Ereignis, welches du dringend mal implementieren solltest, da du Ersteres ja nicht machst.
Und da drin dann einfach
Delphi-Quellcode:
if Assigned(TThread(Sender).FatalException)
then
ShowException(
Exception(TThread(Sender).FatalException),
nil);
Und nicht vergessen, dieser ShowException-Aufruf muß natürlich mit der
VCL synchronisiert werden.
Ex gibt in der
Unit System zwar ein End-Thread-Event, aber wenn Dieses ausgeführt wird, dann kann die Thread-Instanz schon weg sein (FreeOnTerminate) und selbst wenn noch nicht, dann kommt man dort sowieso nicht an den Instanzzeiger.
Klingt logisch und einfach. Ist es sicherlich auch, wenn mal mit Threads viel Erfahrung hat. Leider muß ich da noch viel lernen und die Umsetzung fällt einem dann nicht immer so leicht.
Das mit Assigned(TThread(Sender).FatalException) hab ich grad mal gar nicht verstanden.