diff --git a/Ooui/EventTarget.cs b/Ooui/EventTarget.cs index f23546e..1ef9e10 100644 --- a/Ooui/EventTarget.cs +++ b/Ooui/EventTarget.cs @@ -51,12 +51,14 @@ namespace Ooui var sendListen = false; List handlers; - if (!eventListeners.TryGetValue (eventType, out handlers)) { - handlers = new List (); - eventListeners[eventType] = handlers; - sendListen = true; + lock (eventListeners) { + if (!eventListeners.TryGetValue (eventType, out handlers)) { + handlers = new List (); + eventListeners[eventType] = handlers; + sendListen = true; + } + handlers.Add (handler); } - handlers.Add (handler); if (sendListen) Send (new Message { @@ -72,8 +74,10 @@ namespace Ooui if (handler == null) return; List handlers; - if (eventListeners.TryGetValue (eventType, out handlers)) { - handlers.Remove (handler); + lock (eventListeners) { + if (eventListeners.TryGetValue (eventType, out handlers)) { + handlers.Remove (handler); + } } } @@ -169,13 +173,18 @@ namespace Ooui protected virtual void TriggerEventFromMessage (Message message) { - List handlers; - if (eventListeners.TryGetValue (message.Key, out handlers)) { - var args = EventArgs.Empty; - foreach (var h in handlers) { - h.Invoke (this, args); + List handlers = null; + lock (eventListeners) { + List hs; + if (eventListeners.TryGetValue (message.Key, out hs)) { + handlers = new List (hs); } } + if (handlers == null) return; + var args = EventArgs.Empty; + foreach (var h in handlers) { + h.Invoke (this, args); + } } }