I\'ve read a couple of forums and even a stackoverflow question or two saying that Delegate.EndInvoke is necessary when using Delegate.BeginInvoke. Many of the articles I\'
It has been documented that EndInvoke is not required (no non-managed resources are allocated—assuming you don't wait on the IAsyncResult) when using BeginInvoke to perform action on the GUI thread in a WinForms application.
However this is a specific exception to the general rule: for every BeginOperation there must be a matching EndOperation. As noted on another A here: if the GUI access code can throw, you'll need the EndInvoke to get the exception.
See here for (sort of) official confirmation: http://blogs.msdn.com/b/cbrumme/archive/2003/05/06/51385.aspx#51395 (it's the comment from Chris Brummie 12 May 2003 5:50pm.
Additional: The documentation for Control.BeginInvoke includes this remark:
You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvoke will block until the return value can be retrieved.
So it is official: with WinForm's using asynchronous delegate to perform an action on the GUI thread does not require EndInvoke (unless you need the return value or the possible exception, in either case consider using Invoke).