如何在F#中注册和实现.Net事件的事件处理程序?
我查看了这个链接,但似乎有点冗长.
例:
namespace Core
open Lego.Ev3.Core
open Lego.Ev3.Desktop
type LegoExample() =
let _brick = Brick(BluetoothCommunication("COM3"))
_brick.Changed += OnBrickChanged
let OnBrickChanged =
// some logic goes here...
Run Code Online (Sandbox Code Playgroud)
在F#中,事件表示为IEvent<T>从中继承的值,IObservable<T>因此它们只是普通值 - 而不是特殊的语言构造.
您可以使用以下Add方法注册处理程序:
type LegoExample() =
let brick = Brick(BluetoothCommunication("COM3"))
do brick.Changed.Add(fun e ->
// some logic goes here...
)
Run Code Online (Sandbox Code Playgroud)
do如果要在构造函数中注册处理程序,则需要此处的关键字LegoExample.
或者,您也可以使用Observable模块中的各种功能- 这些功能实现类似于Rx提供的功能:
type LegoExample() =
let brick = Brick(BluetoothCommunication("COM3"))
do brick.Changed
|> Observable.filter (fun e -> ...)
|> Observable.add (fun e ->
// some logic goes here...
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |