使用C#事件从F# [英] Consume C# event from F#

查看:99
本文介绍了使用C#事件从F#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

功能无编程教程,其中的事件流(观察到)是直接从 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< 的,_>。

The event 'OnMessage' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit add_OnMessage and remove_OnMessage methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<>' or '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#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆