F#删除函数处理程序 [英] F# remove function handler
问题描述
因此,我有一个要在事件触发器上执行的函数,但我想稍后将其删除。我该怎么办?我知道F#事件具有 Add
方法,该方法将一个函数添加为处理程序,但是您无法删除此函数。我了解,但是我根本找不到如何创建任何委托! (好吧,是类型的 Foo = type1的委托-> type2
,但我不理解它的用法...)
So, I have a function that I want to execute on an event trigger, but I want to remove it later. What do I do for this? I know that F# events have the Add
method that adds a function as a handler, but you can't remove this function. I understand, but I can't find how to create any delegate at all! (Well, there is the type Foo = delegate of type1 -> type2
, but I don't understand its usage...)
编辑:这是我要执行的操作的更清晰示例,代码如下:
Here's a more clear example of what I want to do, in code:
// 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"
但是我的问题是我想在某个时候删除这个钩子。我知道代表有可能...只是不确切地知道该怎么做。
But my problem is that I want to remove this hook sometime. I know that its possible with delegates... just don't know precisely how to do it.
推荐答案
另一种选择是使用Subscribe方法并使用Dispose取消订阅:
Another option is to use the Subscribe method and unsubscribe using 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()
这篇关于F#删除函数处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!