![]() |
Threads - IdHTTP.Post sendet nicht
Hello World...
Nach langer Zeit der "Abstinenz" darf ich mal wieder was mit Delphi machen und hab natürlich direkt ein Problem mit einer Datei-Uploadfunktion, die ich in einen Tread auslagern möchte. Allgemeine Programminfo: Ein paar Dateien werden gepackt, in einen Memorystream geladen und zusammen mit einer Ziel-URL im thread.create übergeben. Da Threads für mich auch nicht alltäglich waren hab ich mich erstmal an das hier im Forum oft genannte ![]() Wäre schön, wenn sich das jemand anschauen und mir weiterhelfen könnte - ich geh sehr stark davon aus, dass ich irgendeinen blöden Anfängerfehler gemacht habe ;) Start des Threads:
Delphi-Quellcode:
und hier der (VCL) Thread selber:
[...]
mstream := TMemoryStream.Create; mstream.LoadFromFile('data.zip'); mstream.Position := 0; PostData := TIdMultiPartFormDataStream.Create; PostData.AddObject('data', 'zip', mstream, 'data.zip'); // IdHTTP1.Post(url_upload, PostData); // Problemloses Senden der Daten ohne Thread, jedoch "einfrieren" der Application SendThread := TSendThread.Create(url_upload, PostData); [...]
Delphi-Quellcode:
Zu erwähnen wäre hier vielleicht noch, dass im Execute das st_status + Synchronize nicht mehr ausgeführt wird. Ohne das sleep würde der Thread sich beim st_http.Post direkt beenden, mit dem sleep seh ich wenigstens im Process Explorer dass er erstellt wird und sich kurz darauf wieder schliesst.
unit Unit4;
interface uses Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}, IdMultiPartFormData, IdHTTP, IdComponent, Unit1; type TSendThread = class(TThread) st_url, st_status : String; st_progress, st_size : Integer; st_data : TIdMultiPartFormDataStream; st_http : TidHTTP; private protected procedure Execute; override; procedure Sync; public constructor Create(url : String; data : TIdMultiPartFormDataStream); end; implementation { SendThread } procedure TSendThread.Sync; begin Form1.Sync_SendThread(st_status, st_progress); // sleep(3000); end; constructor TSendThread.Create(url : String; data : TIdMultiPartFormDataStream); begin st_http := TIdHTTP.Create(nil); st_url := url; st_data := TIdMultiPartFormDataStream.Create; st_data := data; st_status := 'Ready'; Synchronize(Sync); inherited Create(false); end; procedure TSendThread.Execute; begin st_status := 'starting...'; Synchronize(Sync); sleep(2000); st_http.Post(st_url, st_data); st_status := 'sent'; Synchronize(Sync); end; end. Besten Dank schonmal vorab :) [edit - typos] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz