public IAsyncResult BeginInvoke(Delegate method, object[] args) { AsyncDelegate delegate2 = new AsyncDelegate(method, args); if (!this.InvokeRequired) { delegate2.Execute(true); return delegate2; } BeginInvokeCommand command = null; lock (this.SyncRoot) { int key = this._nextInvokeId++; this._pendingDelegates.Add(key, delegate2); if (this._snapInPlatform != null) { command = new BeginInvokeCommand(); command.Id = key; } } if (command != null) { this._snapInPlatform.ProcessCommand(command); } return delegate2; }