![]() |
Delphi-Version: XE5
Synchronize IdThreadComponent
Hallo,
das Problem ist die "In-Place-Methode" die bei Synchronize aufgerufen wird! Hat einer eine Lösung da?
Delphi-Quellcode:
Fehlermeldung
unit Thread_Syn;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, IdBaseComponent, IdThreadComponent, FMX.Layouts, FMX.ListBox; type TForm1 = class(TForm) Button1: TButton; IdThreadComponent1: TIdThreadComponent; Label1: TLabel; procedure IdThreadComponent1Run(Sender: TIdThreadComponent); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin IdThreadComponent1.Start; end; procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent); var Text: String; begin Text := 'Test!!'; IdThreadComponent1.Synchronize( procedure begin Label1.Text := Text; end); IdThreadComponent1.Stop; end; end. [DCC Fehler] Thread_Syn.pas(41): E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur' |
AW: Synchronize IdThreadComponent
Das Ding will nunmal nur eine Objekt-Methode, also mußt du auch Eine übergeben, so wie es dir die Fehlermeldung auch sagt.
Zitat:
Delphi-Quellcode:
Falls die Indy-Leute in neueren Versionen (nach XE3) es endlich geschafft haben auch die generischen Methoden durchzureichen, oder den interen TIdThreadEx zugänglich machen, dann kannst du natürlich auch diese verwenden.
TThread.Synchronize(nil, procedure
begin ... end); Und statt IdThreadComponent1 solltest du im IdThreadComponent1Run auch besser den Sender verwenden. (aus dem Selben Grund, warum man nicht innerhalb von TForm1 das Form1 verwendet) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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