updated event system

in C# create EventArgs classes and then use the event keyword to create
events with EventHandler<T> type where T : EventArgs