Hi,
Du bist auf dem richtigen Weg!
Hier mal ein erweitertes Bsp.:
Delphi-Quellcode:
var
MailThread : TMailThread;
dwWaitResult : DWORD;
begin
MailThread := TMailThread.Create(true,Email,Opendiag.filename,globalcnt);
MailThread.Resume;
// Suspendeder Thread muss auch aufgeweckt werden
repeat
// Auf Thread warten
dwWaitResult := WaitForSingleObject(MailThread.Handle, 100);
if dwWaitResult <> WAIT_OBJECT_0
then
begin
if dwWaitResult = WAIT_FAILED
then //Abbrechen wenn fehlgeschlagen
break;
Application.ProcessMessages;
// GUI aktualisieren
end;
until dwWaitResult = WAIT_OBJECT_0;
// keinen Thread mehr zum warten
FreeandNil(MailThread);
// Thread freigeben
end;
Vor oder nach FreeeandNil kannst du noch Aktionen ausführen z.B.: Fehler auswerten usw.
Das Thread Objekt "MailThread" würde ich global definieren so kannst du auch vom Abbrechen Button drauf zugreifen.
Jeder Thread besitzt außerdem die Eigenschaft Terminated mit der dieser abgebrochen werden kann.
Den abbruch einer laufenden Übertragung musst du IMO im OnTerminate vornehmen.
Wo der Runtime Error herkommt weis ich auch nicht, aber neue Frage neuer Thread!
P.S.: Einfach mal nach TThread in der Delphi Hilfe schauen.
P.P.S.: Hast du eigentlich schon mal die
DP Suche benutzt
Threads?