AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie eine Prozedur mit Parametern per Syncronize() aufrufen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie eine Prozedur mit Parametern per Syncronize() aufrufen?

Ein Thema von BlueStarHH · begonnen am 23. Feb 2009 · letzter Beitrag vom 23. Feb 2009
 
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
855 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie eine Prozedur mit Parametern per Syncronize() aufrufen?

  Alt 23. Feb 2009, 13: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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 by Thomas Breitkreuz