从F#中消耗C#事件

tch*_*dze 6 c# events f#

接下来的功能反应式编程教程,其中事件流(Observable)直接从System.Timers.Timer.Elapsed事件创建.

 let timer = new System.Timers.Timer(float 1)
 let observable = timer.Elapsed  
 observable 
 |> Observable.subscribe ...
Run Code Online (Sandbox Code Playgroud)

已经class定义了Observable

public delegate void OnMessageDelegate(Message message);

public class Notifier : INotifier
{
   public event OnMessageDelegate OnMessage;

   public void Notify(Message message) 
   => OnMessage?.Invoke(message);
}
Run Code Online (Sandbox Code Playgroud)

引用相应Notifier.OnMessageOnMessage项目,并试图建立add_OnMessageremove_OnMessage事件

 let Start (notifier : Namespace.Notifier)  = 
    notifier.OnMessage      
    |> Observable.subscribe (fun ms -> ...
    0
Run Code Online (Sandbox Code Playgroud)

获取错误消息

事件'OnMessage'具有非标准类型.如果此事件以另一种CLI语言声明,则可能需要使用事件的显式add_OnMessage和remove_OnMessage方法来访问此事件.如果在F#中声明此事件,则使事件类型为"IDelegateEvent < >"或"IEvent <,_>" 的实例化.

消息是自我描述的,我认为我的目标是从事件创建流而不是通过IDelegateEvent<_>方法订阅它.

ild*_*arn 6

似乎F#期望事件的委托类型System.EventHandler或特殊化System.EventHandler<'TEventArgs>.

尝试将OnMessagefrom 的类型更改OnMessageDelegateEventHandler<Message>.