IAsyncResult ISynchronizeInvoke.BeginInvoke(Delegate method, object[] args) { var result = new InvokeResult(); object Invoke() { try { return(method.DynamicInvoke(args)); } catch (Exception ex) { result.ExceptionThrown = true; return(ex); } } if (!InvokeRequired) { result.Finish(Invoke(), true); } else { StartSyncInvoke(() => result.Finish(Invoke(), false)); } return(result); }