[英]Consume C# event from F#
Followed Functional Reactive Programming tutorial, where stream of events ( Observable
) is directly created from System.Timers.Timer.Elapsed
event. 接下来的功能反应式编程教程,其中直接从
System.Timers.Timer.Elapsed
事件创建事件流( Observable
)。
let timer = new System.Timers.Timer(float 1)
let observable = timer.Elapsed
observable
|> Observable.subscribe ...
Have class
defined in C# 在C#中定义
class
public delegate void OnMessageDelegate(Message message);
public class Notifier : INotifier
{
public event OnMessageDelegate OnMessage;
public void Notify(Message message)
=> OnMessage?.Invoke(message);
}
Referenced corresponding .dll into F# project and trying to create Observable
from Notifier.OnMessage
event 将相应的.dll引用到F#项目中并尝试从
Notifier.OnMessage
事件创建Observable
let Start (notifier : Namespace.Notifier) =
notifier.OnMessage
|> Observable.subscribe (fun ms -> ...
0
Getting error message 获取错误消息
The event
OnMessage
has a non-standard type.OnMessage
事件具有非标准类型。 If this event is declared in another CLI language, you may need to access this event using the explicitadd_OnMessage
andremove_OnMessage
methods for the event.如果此事件以另一种CLI语言声明,则可能需要使用事件的显式
add_OnMessage
和remove_OnMessage
方法来访问此事件。 If this event is declared in F#, make the type of the event an instantiation of eitherIDelegateEvent<_>
orIEvent<_,_>
.如果在F#中声明此事件,则使事件的类型为
IDelegateEvent<_>
或IEvent<_,_>
的实例化。
The error message is self descriptive, though I aim to create stream from event and not to subscribe on it via add_OnMessage
method. 错误消息是自描述的,但我的目标是从事件创建流,而不是通过
add_OnMessage
方法订阅它。
It appears that F# expects the delegate type for events to be System.EventHandler
or a specialization of System.EventHandler<'TEventArgs>
. 似乎F#期望事件的委托类型是
System.EventHandler
或System.EventHandler<'TEventArgs>
。
Try changing the type of OnMessage
from OnMessageDelegate
to EventHandler<Message>
. 尝试将
OnMessage
的类型从OnMessageDelegate
更改为EventHandler<Message>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.