F#删除函数处理程序 [英] F# remove function handler

查看:71
本文介绍了F#删除函数处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我有一个要在事件触发器上执行的函数,但我想稍后将其删除。我该怎么办?我知道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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆