![]() |
TRESTRequest ExecuteAsync und FMX ShowMessage in OnAfterExecute
Ahoi,
ich bekomme im TRESTRequest eine Runtime-Exception "Meldungen müssen im Haupt-UI-Thread angezeigt werden" wenn ich innerhalb von OnAfterExecute versuche ShowMessage aufzurufen. Möglich dass ExecuteAsync OnAfterExecute aus einem Thread heraus aufruft. Aber wie bekomme ich dann am besten eine Fehlermeldung visualisiert? PS: Es geht um FMX, nicht VCL. Grüße Cody |
AW: TRESTRequest ExecuteAsync und FMX ShowMessage in OnAfterExecute
Schau dir mal die Parameterliste und die im Quelltext integrierte Doku von ExecuteAsync in der Klassendefinition an, dann geht dir ein Licht auf. :idea:
Delphi-Quellcode:
uses
REST.Client, REST.Types, IPPeerClient, System.Json; procedure TForm3.Button1Click(Sender: TObject); var RESTClient: TRESTClient; RESTRequest: TRESTRequest; RESTResponse: TRESTResponse; MyCompletionHandler: TCompletionHandler; begin RESTClient := TRESTClient.Create(nil); RESTRequest := TRESTRequest.Create(nil); RESTResponse := TRESTResponse.Create(nil); try RESTClient.BaseURL := 'http://www.codigopostal.gov.co'; RESTClient.RaiseExceptionOn500 := False; RESTRequest.Client := RESTClient; RESTRequest.AddParameter('municipio', 'Santa Marta'); RESTRequest.AddParameter('departamento', 'Magdalena'); RESTRequest.AddParameter('direccion', 'Cra. 16 1c-20'); RESTRequest.Resource := 'glow/param'; RESTRequest.Response := RESTResponse; MyCompletionHandler := procedure begin if RESTResponse.StatusCode = 200 then ShowMessage(RESTResponse.Content) else ShowMessage('Ist alles oll! Ich mach Hitzefrei!'); end; // der zweite Parameter "ASynchronized" ist per Default auch schon True RESTRequest.ExecuteAsync(MyCompletionHandler, True); finally // Um die Speicherlecks kümmern wir uns in diesem Beispiel-Quelltext mal nicht. // RESTClient.Free; // RESTRequest.Free; // RESTResponse.Free; end; end; |
AW: TRESTRequest ExecuteAsync und FMX ShowMessage in OnAfterExecute
Alternativ kannst du auch
Delphi-Quellcode:
schreiben und damit schon alles gelöst haben.
RESTRequest.SynchronizedEvents := True;
Delphi-Quellcode:
/// <summary>
/// Specifies if Events (such as OnAfterExecute) should run in the context of the main /// thread (true) or in the context of an arbitrary thread - which was created by the developer or by using /// ExecuteAsync. /// </summary> // <seealso cref="TCustomRESTRequest.ExecuteAsync" /> property SynchronizedEvents: Boolean read FSynchronizedEvents write SetSynchronizedEvents default true; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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-2025 by Thomas Breitkreuz