Consume C# event from F#

耗尽温柔 提交于 2019-12-10 13:27:34

问题


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 ...

Have class defined in C#

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

 let Start (notifier : Namespace.Notifier)  = 
    notifier.OnMessage      
    |> Observable.subscribe (fun ms -> ...
    0

Getting error message

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<_,_>.

The error message is self descriptive, though I aim to create stream from event and not to subscribe on it via add_OnMessage method.


回答1:


It appears that F# expects the delegate type for events to be System.EventHandler or a specialization of System.EventHandler<'TEventArgs>.

Try changing the type of OnMessage from OnMessageDelegate to EventHandler<Message>.



来源:https://stackoverflow.com/questions/38009398/consume-c-sharp-event-from-f

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!