Einzelnen Beitrag anzeigen

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