Hallo alle zusamen!
Ich habe mir folgende Thread-Klasse erstellt:
Delphi-Quellcode:
TSendMailsProgress = procedure(Sender: TObject; MailNr, MailsLeft: Integer; TimeRunning, TimeLeft: TTime) of object;
TMailSendThread = class(TThread)
private
FOnSendMailsProgress: TSendMailsProgress;
public
procedure Execute; override;
property OnSendMailsProgress: TSendMailsProgress read FOnSendMailsProgress write FOnSendMailsProgress;
end;
procedure TMailSendThread.Execute;
var
MailNr, MailsLeft: Integer;
TimeRunning, TimeLeft: TTime;
begin
while not Terminated do
begin
//Hier passiert auch noch was. Gelöscht, damit es übersichtlicher ist.
//Z.B. werden MailNr, MailsLeft, TimeRunning, TimeLeft hier gefüllt.
if Assigned(FOnSendMailsProgress) then
FOnSendMailsProgress(Self, MailNr, MailsLeft, TimeRunning, TimeLeft);
end;
end;
Ich möchte nun die Methode OnSendMailsProgress über Synchronize aufrufen, da dort Interkationen mit der
VCL/
GUI stattfinden. Wie kann ich dies tun? Ich habe es wie folgt probiert:
Delphi-Quellcode:
procedure TMailSendThread.Execute;
var
MailNr, MailsLeft: Integer;
TimeRunning, TimeLeft: TTime;
procedure DoSendMailsProgress;
begin
if Assigned(FOnSendMailsProgress) then
FOnSendMailsProgress(Self, MailNr, MailsLeft, TimeRunning, TimeLeft);
end;
begin
while not Terminated do
begin
//Hier passiert auch noch was. Gelöscht, damit es übersichtlicher ist.
//Z.B. werden MailNr, MailsLeft, TimeRunning, TimeLeft hier gefüllt.
Syncronize(DoSendMailsProgress); //<-- FEHLER !!!!!
end;
end;
Dort wird der Fehler "Inkompatible Typen: Methodenzeiger und reguläre Prozedur" angezeigt. Ersetze ich die Zeile mit dem Fehler durch
Synchronize(@DoSendMailsProgress); // @-Zeichen beachten
erscheint der Fehler "Inkompatible Typen: TThreadMethod und Pointer".
Wer hat eine Lösung? Danke!