所以,我有一个我想在事件触发器上执行的函数,但我想稍后删除它.我该怎么做?我知道F#事件具有Add将函数添加为处理程序的方法,但是您无法删除此函数.我理解,但我找不到如何创建任何委托!(嗯,是的type Foo = delegate of type1 -> type2,但我不明白它的使用...)
编辑:这是一个更清晰的例子,我想做什么,在代码中:
// Define and publish event
let _someEvent = new Event<string>()
let SomeEvent = someEvent.Publish
// Normally, I'd do this to use it:
SomeEvent.Add (fun arg -> printfn "Argument: %s" arg)
// Trigger the event
someEvent.Trigger "Hello world"
Run Code Online (Sandbox Code Playgroud)
但我的问题是我想在某个时候删除这个钩子.我知道这可能与代表有关......只是不知道如何做到这一点.
另一种选择是使用Subscribe方法并使用Dispose取消订阅:
// Define and publish event
let someEvent = new Event<string>()
let SomeEvent = someEvent.Publish
// Subscribe to event
let subscription =
SomeEvent.Subscribe (fun arg -> printfn "Argument: %s" arg)
// Trigger the event
someEvent.Trigger "Hello world"
// Unsubscribe
subscription.Dispose()
Run Code Online (Sandbox Code Playgroud)
是的,只需使用一个处理程序。
// Define and publish event
let _someEvent = new Event<string>()
let SomeEvent = _someEvent.Publish
// wrap function in handler
let handler = Handler<string>(fun _ arg -> printfn "Argument: %s" arg)
// add
SomeEvent.AddHandler handler
// remove
SomeEvent.RemoveHandler handler
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |