Einzelnen Beitrag anzeigen

BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie eine Prozedur mit Parametern per Syncronize() aufrufen?

  Alt 23. Feb 2009, 12:19
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!
  Mit Zitat antworten Zitat