[英]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_OnMessage
和remove_OnMessage
方法來訪問此事件。 如果在F#中聲明此事件,則使事件的類型為IDelegateEvent<_>
或IEvent<_,_>
的實例化。
錯誤消息是自描述的,但我的目標是從事件創建流,而不是通過add_OnMessage
方法訂閱它。
似乎F#期望事件的委托類型是System.EventHandler
或System.EventHandler<'TEventArgs>
。
嘗試將OnMessage
的類型從OnMessageDelegate
更改為EventHandler<Message>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.