我正在尝试将 Spring4d 框架用于 Delphi,并且我想使用多播事件。在使用“正常”TNotifyEvent 时,它可以工作并且处理程序将被调用两次。
uses
...
Spring,
Spring.Events,
Spring.Events.Base;
procedure TfrmMain.EventHandler1(Sender: TObject);
begin
Log('called handler1');
end;
procedure TfrmMain.btnNotifyEventClick(Sender: TObject);
var
MulticastEvent: TEvent<TNotifyEvent>;
begin
MulticastEvent := TEvent<TNotifyEvent>.Create;
try
MulticastEvent.Add(EventHandler1);
MulticastEvent.Add(EventHandler1);
MulticastEvent.Add(EventHandler1);
MulticastEvent.Remove(EventHandler1);
MulticastEvent.Invoke;
finally
MulticastEvent.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将这些 Multicast 事件与我自己的 Event 一起使用TSyncEvent。EventHandler2 需要一个字符串。所以我想用文本调用 Invoke 方法。
type
TSyncEvent = procedure(Sender: TObject; const iMsg: string) of object;
procedure TfrmMain.EventHandler2(Sender: TObject; const iMsg: string);
begin
Log('called handler2: '+iMsg);
end;
procedure TfrmMain.btnSyncEventClick(Sender: TObject);
var
MulticastEvent: TEvent<TSyncEvent>;
begin
MulticastEvent := TEvent<TSyncEvent>.Create;
try
MulticastEvent.Add(EventHandler2); …Run Code Online (Sandbox Code Playgroud)