There's a tiny race condition here because all the parameters are updated one after the other. In between any of these the callback could being and process with half the parameters in their old setting and half in the new. 

You could stick all the state in a struct and then use a ControlValueAtomic to update them atomically.