AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein NotificationCenter in Indy TCP Client Server Thread marshalled
Thema durchsuchen
Ansicht
Themen-Optionen

NotificationCenter in Indy TCP Client Server Thread marshalled

Ein Thema von Ykcim · begonnen am 18. Jun 2024 · letzter Beitrag vom 18. Jun 2024
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
811 Beiträge
 
Delphi 10.4 Sydney
 
#1

NotificationCenter in Indy TCP Client Server Thread marshalled

  Alt 18. Jun 2024, 09:59
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:
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;
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:
Zitat:
Eine Schnittstelle, die für einen anderen Thread marshalled war, wurde von der Anwendung aufgerufen.
In dem Client sieht das Ganze so aus:
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:
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;
Kann mir jemand sagen, wo die Ursache liegt, denn ich bin im Umgang mit Threads noch nicht sehr erfahren...

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
688 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: NotificationCenter in Indy TCP Client Server Thread marshalled

  Alt 18. Jun 2024, 11:22
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.
Peter Below
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
811 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: NotificationCenter in Indy TCP Client Server Thread marshalled

  Alt 18. Jun 2024, 15:04
Hallo peterbelow,

vielen Dank! So funktioniert es ohne Probleme!

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
    TThread.Queue(nil, procedure
                       begin
                         ShowMessageInWindows('Server Message', msgFromServer);
                       end);
    // ... AutoDisconnect
    if msgFromServer = 'Goodbye Client then begin
      btn_disconnectClick(nil);
    end;
end;
Vielen Dank!

Patrick
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz