The Invoke method is synchronous, i.e. it doesn't return until the invoked method does. BeginInvoke is asynchronous, i.e. it returns immediately, not waiting for the invoked method to complete. I would guess that your call to Invoke would never return because the UI thread was blocked, thus preventing the invoked method completing. You may have had a deadlock somewhere.