F#删除函数处理程序

Jwo*_*sty 7 .net events f#

所以,我有一个我想在事件触发器上执行的函数,但我想稍后删除它.我该怎么做?我知道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)

但我的问题是我想在某个时候删除这个钩子.我知道这可能与代表有关......只是不知道如何做到这一点.

Phi*_*ord 7

另一种选择是使用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)


gra*_*bot 6

是的,只需使用一个处理程序。

// 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)