从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.EventHandler
或System.EventHandler<'TEventArgs>
。
尝试将OnMessage
的类型从OnMessageDelegate
更改为EventHandler
。