Wird der TCPClient im Thread-Kontext erzeugt? Achtung: Im Thread-Konstruktor erzeugte Dinge sind nicht im Thread-Kontext, sondern in dem des Hauptthreads!!! Die meisten Komponenten, die irgendwie mit Sockets und ähnlichen WinAPIs hantieren sind oft nur in dem Kontext zu benutzen, in dem sie auch erstellt wurden. Du musst diese in der Execute-Methode erstellen.
Die Internet Direct (
Indy)
TCP Clientkomponenten können aus mehreren Threads verwendet werden, solange der Zugriffe threadsafe erfolgt. Ein Beispiel ist der Telnet Client "TIdTelnet" im Lib/Protocols Verzeichnis. Diese Klasse ist abgeleitet von TIdTCPClientCustom und startet einen Thread (TIdTelnetReadThread), der die vom Server gesendeten Daten empfängt. Die TIdTelnet Instanz wird zwar im Mainthread erzeugt, und aus dem Mainthread werden Befehle an den Server gesendet, aber aus dem ReadThread wird kontinuierlich auf den IOHandler der Komponente zugegriffen.
Möglicherweise besteht die Beschränkung (Verwendung nur im erzeugenden Thread) bei plattformgebundenen Komponenten wie ICS, die ein Windows Fensterhandle benötigen - aber mit ICS habe ich zuletzt 2008 kurz Kontakt gehabt.