Dot-Net

F# 刪除函式處理程序

  • February 1, 2013

所以,我有一個想要在事件觸發器上執行的函式,但我想稍後將其刪除。我該怎麼做?我知道 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"

但我的問題是我想在某個時候刪除這個鉤子。我知道它可能與代表……只是不知道該怎麼做。

另一種選擇是使用訂閱方法並使用 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()

是的,只需使用處理程序。

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

引用自:https://stackoverflow.com/questions/14533489