internal static void NotifyEventHandlers(WindowMessage message) { var messageType = message.GetType(); if (EventHandlers.ContainsKey(messageType)) { EventHandlers[messageType].ForEach(handler => { try { switch (message.Message) { case WindowMessages.KeyDown: ((MessageHandler <KeyDown>)handler).Invoke((KeyDown)message); break; case WindowMessages.KeyUp: ((MessageHandler <KeyUp>)handler).Invoke((KeyUp)message); break; case WindowMessages.LeftButtonDoubleClick: ((MessageHandler <LeftButtonDoubleClick>)handler).Invoke((LeftButtonDoubleClick)message); break; case WindowMessages.LeftButtonDown: ((MessageHandler <LeftButtonDown>)handler).Invoke((LeftButtonDown)message); break; case WindowMessages.LeftButtonUp: ((MessageHandler <LeftButtonUp>)handler).Invoke((LeftButtonUp)message); break; case WindowMessages.MiddleButtonDoubleClick: ((MessageHandler <MiddleButtonDoubleClick>)handler).Invoke((MiddleButtonDoubleClick)message); break; case WindowMessages.MiddleButtonDown: ((MessageHandler <MiddleButtonDown>)handler).Invoke((MiddleButtonDown)message); break; case WindowMessages.MiddleButtonUp: ((MessageHandler <MiddleButtonUp>)handler).Invoke((MiddleButtonUp)message); break; case WindowMessages.MouseMove: ((MessageHandler <MouseMove>)handler).Invoke((MouseMove)message); break; case WindowMessages.MouseWheel: ((MessageHandler <MouseWheel>)handler).Invoke((MouseWheel)message); break; case WindowMessages.RightButtonDoubleClick: ((MessageHandler <RightButtonDoubleClick>)handler).Invoke((RightButtonDoubleClick)message); break; case WindowMessages.RightButtonDown: ((MessageHandler <RightButtonDown>)handler).Invoke((RightButtonDown)message); break; case WindowMessages.RightButtonUp: ((MessageHandler <RightButtonUp>)handler).Invoke((RightButtonUp)message); break; } } catch (Exception e) { Console.WriteLine("Error notifying event handler for message '{0}'", message); Console.WriteLine(e); } }); } }