Erstmal, TMessageManager ist nicht threadsafe.
Zumindest ist das aber so vorgesehen:
Delphi-Quellcode:
procedure TMessageManager.SendMessage(
const Sender: TObject; AMessage: TMessage; ADispose: Boolean);
var
Subscribers: TListenerList;
begin
if AMessage =
nil then
raise Exception.CreateRes(@SArgumentInvalid);
TMonitor.Enter(FListeners);
try
try
if FListeners.TryGetValue(AMessage.ClassType, Subscribers)
then
Subscribers.SendMessage(Sender, AMessage);
finally
if ADispose
then
AMessage.Free;
end;
finally
TMonitor.Exit(FListeners);
end;
end;
Kannst du konkrete Fälle aufzeigen bei denen TMessageManager nicht thread-safe ist? (Ich will ja gar nicht ausschließen dass es die gibt.)