从F#中消耗C#事件

接下来的function反应式编程教程,其中事件流( Observable )直接从System.Timers.Timer.Elapsed事件创建。

  let timer = new System.Timers.Timer(float 1) let observable = timer.Elapsed observable |> Observable.subscribe ... 

C#定义class

 public delegate void OnMessageDelegate(Message message); public class Notifier : INotifier { public event OnMessageDelegate OnMessage; public void Notify(Message message) => OnMessage?.Invoke(message); } 

将相应的Dll引用到F#项目中并尝试从Notifier.OnMessage事件创建Observable

  let Start (notifier : Namespace.Notifier) = notifier.OnMessage |> Observable.subscribe (fun ms -> ... 0 

获取错误消息

事件’OnMessage’具有非标准类型。 如果此事件以另一种CLI语言声明,则可能需要使用事件的显式add_OnMessage和remove_OnMessage方法来访问此事件。 如果在F#中声明此事件,则使事件的类型为“IDelegateEvent < >”或“IEvent < ,_>”的实例化。

消息是自描述的,我认为我的目标是从事件创建流,而不是通过add_OnMessage方法订阅它。

似乎F#期望事件的委托类型是System.EventHandlerSystem.EventHandler<'TEventArgs>

尝试将OnMessage的类型从OnMessageDelegate更改为EventHandler