/// <summary> /// Attaches an event handler to the COM object. /// </summary> /// <param name="eventName"> /// The name of the event. /// </param> /// <param name="handler"> /// The event handler delegate. /// </param> /// <exception cref="ArgumentNullException"> /// <para><paramref name="eventName"/> is <see langword="null"/></para> /// <para>-or-</para> /// <para><paramref name="handler"/> is <see langword="null"/></para> /// </exception> private void AttachEventHandler(string eventName, Delegate handler) { if (eventName == null || eventName.Length == 0) { throw new ArgumentNullException("eventName"); } if (handler == null) { throw new ArgumentNullException("handler"); } lock (this) { if (_ComEventProvider == null) { _ComEventProvider = new ComEventProvider(_COMObject, _InterceptType, this); } _ComEventProvider.AddEventHandler(eventName, handler); } }
/// <summary> /// Release the COM reference /// </summary> /// <param name="disposing"> /// <see langword="true"/> if this was called from the /// <see cref="IDisposable"/> interface. /// </param> private void Dispose(bool disposing) { if (disposing) { if (this._ComEventProvider != null) { this._ComEventProvider.Dispose(); this._ComEventProvider = null; } } if (this._COMObject != null) { if (Marshal.IsComObject(this._COMObject)) { while (Marshal.ReleaseComObject(this._COMObject) > 0) { ; } } this._COMObject = null; } }