![]() |
NotificationCenter in Indy TCP Client Server Thread marshalled
Hallo Zusammen,
ich habe meinen ersten Versuch mit einer Indy TCP Client Server App gemacht. Durch eine Anleitung ist das auch gelungen. Jetzt wollte ich eine Notification Nachricht hinzufügen, dass wenn der Server an die Clients etwas schickt, dass es in Windows angezeigt wird. Dazu verwende ich folgende Procedure:
Delphi-Quellcode:
Wenn ich diese in einer TestApp ausführe, bekomme ich die Message in Windows angezeigt, wie gewünscht. Wenn ich diese Procedure aber in der Indy TCP Client App ausführe, bekomme ich folgende Fehlermeldung:
procedure TFClient.ShowMessageInWindows(msgTitel, msgFromServer: string);
var MyNotification: TNotification; begin MyNotification := NtfctnCntr.CreateNotification; Try MyNotification.Title := msgTitel; MyNotification.AlertBody := msgFromServer; NtfctnCntr.PresentNotification(MyNotification); Finally MyNotification.Free; End; end; Zitat:
Delphi-Quellcode:
procedure TFClient.IdThreadComponentRun(Sender: TIdThreadComponent);
var msgFromServer : string; begin // ... read message from server msgFromServer := IdTCPClient.IOHandler.ReadLn(); // ... messages log Display('SERVER', msgFromServer); // ... Show Message in Windows Messages ShowMessageInWindows('Server Message', msgFromServer); // ... AutoDisconnect if msgFromServer = 'Goodbye Client ' then begin btn_disconnectClick(nil); end; end;
Delphi-Quellcode:
Kann mir jemand sagen, wo die Ursache liegt, denn ich bin im Umgang mit Threads noch nicht sehr erfahren...
procedure TFClient.Display(p_sender : String; p_message : string);
begin TThread.Queue(nil, procedure begin MessagesLog.Lines.Add('[' + p_sender + '] - ' + GetNow() + ': ' + p_message); end ); end; Vielen Dank Patrick |
AW: NotificationCenter in Indy TCP Client Server Thread marshalled
Der Indy Client benutzt einen sekundären Thread. Ruf die ShowMessageInWindows-Methode nicht direkt sondern per TThread.Queue oder TThread.Synchronize auf damit sie im Kontext des Hauptthreads ausgeführt wird.
|
AW: NotificationCenter in Indy TCP Client Server Thread marshalled
Hallo peterbelow,
vielen Dank! So funktioniert es ohne Probleme!
Delphi-Quellcode:
Vielen Dank!
procedure TFClient.IdThreadComponentRun(Sender: TIdThreadComponent);
var msgFromServer : string; begin // ... read message from server msgFromServer := IdTCPClient.IOHandler.ReadLn(); // ... messages log Display('SERVER', msgFromServer); // ... Show Message in Windows Messages TThread.Queue(nil, procedure begin ShowMessageInWindows('Server Message', msgFromServer); end); // ... AutoDisconnect if msgFromServer = 'Goodbye Client ' then begin btn_disconnectClick(nil); end; end; Patrick |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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