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