问题描述
功能无编程教程,其中的事件流(观察到
)是直接从 System.Timers.Timer.Elapsed
事件创建的。
Followed Functional Reactive Programming tutorial, where stream of events (Observable
) is directly created from System.Timers.Timer.Elapsed
event.
let timer = new System.Timers.Timer(float 1)
let observable = timer.Elapsed
observable
|> Observable.subscribe ...
的类
在 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#
项目,并试图创造观测
从 Notifier.OnMessage
事件
Referenced corresponding Dll
into F#
project and trying to create Observable
from Notifier.OnMessage
event
let Start (notifier : Namespace.Notifier) =
notifier.OnMessage
|> Observable.subscribe (fun ms -> ...
0
获得错误信息
Getting error message
事件的onMessage有一个非标准的类型。如果此事件在其他CLI语言中声明,则可能需要访问此事件。使用该事件的明确add_OnMessage和remove_OnMessage方法如果此事件在F#中声明,使任何一方的实例化的事件的类型IDelegateEvent<的>'或'IEvent< 的,_>。
信息是自描述性的,以为我的目标是从事件创建流,而不是通过 add_OnMessage上订阅
方法。
Message is self descriptive, thought i aim to create stream from event and not to subscribe on it via add_OnMessage
method.
推荐答案
看来,F#预计,委托类型的事件是 System.EventHandler
或 System.EventHandler℃的专业化;'TEventArgs方式>
It appears that F# expects the delegate type for events to be System.EventHandler
or a specialization of System.EventHandler<'TEventArgs>
.
尝试从 OnMessageDelegate
更改的onMessage
的类型事件处理程序和LT;消息>
。
这篇关于使用C#事件从F#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!