簡體   English   中英

從F#中消耗C#事件

[英]Consume C# event from F#

接下來的功能反應式編程教程,其中直接從System.Timers.Timer.Elapsed事件創建事件流( Observable )。

 let timer = new System.Timers.Timer(float 1)
 let observable = timer.Elapsed  
 observable 
 |> Observable.subscribe ...

在C#中定義class

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事件創建Observable

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

獲取錯誤消息

OnMessage事件具有非標准類型。 如果此事件以另一種CLI語言聲明,則可能需要使用事件的顯式add_OnMessageremove_OnMessage方法來訪問此事件。 如果在F#中聲明此事件,則使事件的類型為IDelegateEvent<_>IEvent<_,_>的實例化。

錯誤消息是自描述的,但我的目標是從事件創建流,而不是通過add_OnMessage方法訂閱它。

似乎F#期望事件的委托類型是System.EventHandlerSystem.EventHandler<'TEventArgs>

嘗試將OnMessage的類型從OnMessageDelegate更改為EventHandler<Message>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM