First, there are some practical physical limitations of using Action<T1, T2, T2... > vs using a derived class of EventArgs, three main ones that I can think of: If you change the number or types of parameters, every method that subscribes to that event will have to be changed to conform to the new signature.