关注Functional Reactive Programming教程,其中事件流(Observable
)直接从System.Timers.Timer.Elapsed
事件创建。
let timer = new System.Timers.Timer(float 1)
let observable = timer.Elapsed
observable
|> Observable.subscribe ...
在class
C#
public delegate void OnMessageDelegate(Message message);
public class Notifier : INotifier
{
public event OnMessageDelegate OnMessage;
public void Notify(Message message)
=> OnMessage?.Invoke(message);
}
将相应的Dll
引用到F#
项目并尝试从Observable
事件中创建Notifier.OnMessage
let Start (notifier : Namespace.Notifier) =
notifier.OnMessage
|> Observable.subscribe (fun ms -> ...
0
收到错误消息
事件'OnMessage'具有非标准类型。如果此事件以另一种CLI语言声明,则可能需要使用事件的显式add_OnMessage和remove_OnMessage方法来访问此事件。如果在F#中声明此事件,则使事件的类型为'IDelegateEvent< >'的实例化或'IEvent< ,_>'。
消息是自我描述的,我认为我的目标是从事件创建流而不是通过add_OnMessage
方法订阅它。
答案 0 :(得分:5)
看来F#期望事件的委托类型为System.EventHandler
或System.EventHandler<'TEventArgs>
的特化。
尝试将OnMessage
的类型从OnMessageDelegate
更改为EventHandler<Message>
。