In your original post, I found it interesting you called this InvokeOnUIThread, but the implementation did a BeginInvoke. Very different operational behaviors there.
This is mostly a matter of performance. The normal pattern has slightly better performance, since we're only calling through a delegate when we absolutely must. I'm not 100% sure about how things are implemented under the covers, but I'd suspect you'd be
better off just calling Invoke (or BeginInvoke) without checking InvokeRequired, rather than wrapping this in a InvokeOnUIThread method.