I'm superstitious about EndInvoke() and always call it even if the documentation says it's not required, but I don't blame you for following the documentation. It's probably because I've had to work with third-party stuff that doesn't do so well if you omit the EndInvoke(). I just tried it and it works fine without EndInvoke(), I bet I didn't have throttling implemented when I tried it out.

Either way, Invoke() is what I'd have reached for; it's the smallest hammer for this job.