internal object EventHandler(Delegate target, params object[] args) { this._eventsStack.Push(InvokeHelper.Create(target, args)); try { this._WaitInternal(); while (this._eventsStack.Count == this._methodsStack.Count - 1) { this._methodsStack.Peek().Invoke(); this._WaitInternal(); } if (this._eventsStack.Peek().Exception != null) { throw new TargetInvocationException(this._eventsStack.Peek().Exception); } return(this._eventsStack.Peek().ReturnValue); } finally { this._eventsStack.Pop(); } }