跟着Functional Reactive Programming教程,其中事件流(Observable
)是從System.Timers.Timer.Elapsed
事件直接創建的。從F#消耗C#事件#
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);
}
定義class
引用相應Dll
到F#
項目,並試圖從Notifier.OnMessage
事件
let Start (notifier : Namespace.Notifier) =
notifier.OnMessage
|> Observable.subscribe (fun ms -> ...
0
獲得錯誤信息創建Observable
事件'OnMessage'具有非標準類型。如果此事件是以另一種CLI語言聲明的,則可能需要使用該事件的顯式add_OnMessage和remove_OnMessage方法訪問此事件。如果此事件在F#中聲明,則使事件的類型成爲'IDelegateEvent < >'或'IEvent <,_>'的實例化。
消息是自描述性的,我以爲我的目的是從事件創建流而不是通過add_OnMessage
方法訂閱它。
如果您擺脫了OnMessageDelegate並將OnMessage更改爲公共事件EventHandler Messaged; (N.b.重命名和類型更改都是故意的) –
ildjarn
@ildjarn優秀*事件'OnMessage'具有非標準類型*提示錯誤消息,我沒有得到。發表一個答案,將接受。 – tchelidze