First of all
myObject.StateChanged += new EventHandler(ObjectStateChanged);
is equivalent to
myObject.StateChanged += ObjectStateChanged;
.
It's just a shorthand version of first syntax.
Second, handler is called multiple times since you might have hooked a delegate multiple time
using +=
.
So, what you should do is prior of hooking a delegate, make sure you first unhook in case already hooked:
myObject.StateChanged -= ObjectStateChanged;
myObject.StateChanged += ObjectStateChanged;