You only need BeginInvoke and the corresponding EndInvoke if you want to invoke the delegate asynchronously, i.e. it will not block the current thread. This is useful for long-running methods or methods that call processes that you do not control, for example. across application boundaries.
From what you described, you might be better off using the Invoke method, which will return a value within the same method - and to the same stream, i.e. synchronously. Of course, your thread may be blocked by a long running process in this case. It depends on what you are trying to do.
source share