event.create in f#?

fra*_*ssu 3 events f#

我正在尝试编译源代码:F#中的自定义WPF控件

这条线怎么样:

 let (handler, event) = Event.create<EventArgs>()
Run Code Online (Sandbox Code Playgroud)

引发错误:

The value, constructor, namespace or type 'create' is not defined

MSDN的Control.Event模块(F#)页面不谈论这样的功能:

此处说明了Event模块提供的附加功能.下面的代码示例说明了Event.create的基本用法,用于创建事件和触发器方法,以lambda表达式的形式添加两个事件处理程序,然后触发事件以执行两个lambda表达式.

type MyType() =
   let myEvent = new Event<_>()

   member this.AddHandlers() =
      Event.add (fun string1 -> printfn "%s" string1) myEvent.Publish
      Event.add (fun string1 -> printfn "Given a value: %s" string1) myEvent.Publish

   member this.Trigger(message) =
      myEvent.Trigger(message)

let myMyType = MyType()
myMyType.AddHandlers()
myMyType.Trigger("Event occurred.")
Run Code Online (Sandbox Code Playgroud)

但请注意,它仅在说明中提及,而不是在示例中.

此外,Control.Event模块(F#)页面没有引用此类create功能.

我想这可能是一个旧功能或者什么,但我是F#的新手,所以我看不出它应该被替换为什么..

scr*_*wtp 8

Event.create对于事件而言,它是一个相当古老的API,从F#2.0开始判断MSDN上的内容.它为您提供了一个触发器功能和一个已发布的事件 - 这两个事件现在都是Publish和类的Trigger成员一起生活的Event.

因此,如果您想以create"现代"术语实现,它可能看起来像这样:

module Event = 
    let create<'T> () = 
        let event = Event<'T>()
        event.Trigger, event.Publish
Run Code Online (Sandbox Code Playgroud)

我不建议你普遍使用它,但也许这足以使旧的代码恢复生机(这里正确的方法是重构它来使用PublishTrigger不是create).