Skip to content

Instantly share code, notes, and snippets.

@otf
Created September 1, 2012 20:55
Show Gist options
  • Save otf/3586997 to your computer and use it in GitHub Desktop.
Save otf/3586997 to your computer and use it in GitHub Desktop.
ThreadLocalEvent
type ThreadLocalEvent<'T>() =
let handlers = new ThreadLocal<Handler<'T>>()
member this.Publish = this :> IDelegateEvent<Handler<'T>>
member this.Trigger(arg:'T) =
if handlers.Value <> null then
handlers.Value.Invoke(this, arg)
interface IDelegateEvent<Handler<'T>> with
member this.AddHandler(handler : Handler<'T>) =
handlers.Value <- Delegate.Combine(handlers.Value, handler) :?> Handler<'T>
member this.RemoveHandler(handler: Handler<'T>) =
handlers.Value <- Delegate.Remove(handlers.Value, handler) :?> Handler<'T>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment