/// <summary> /// Releases the unmanaged resources used by this <see cref="RemoteInputAdapter"/> and optionally releases the managed resources. /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (!m_disposed) { try { // This will be done regardless of whether the object is finalized or disposed. if (disposing) { // This will be done only when the object is disposed by calling Dispose(). if (m_historianDataListener != null) { m_historianDataListener.DataExtracted -= HistorianDataListener_DataExtracted; m_historianDataListener.SocketConnecting -= HistorianDataListener_SocketConnecting; m_historianDataListener.SocketConnected -= HistorianDataListener_SocketConnected; m_historianDataListener.SocketDisconnected -= HistorianDataListener_SocketDisconnected; m_historianDataListener.Parser.OutputTypeNotFound -= HistorianDataListener_OutputTypeNotFound; m_historianDataListener.Parser.DataDiscarded -= HistorianDataListener_DataDiscarded; m_historianDataListener.Parser.ParsingException -= HistorianDataListener_ParsingException; m_historianDataListener.Dispose(); } } } finally { m_disposed = true; // Prevent duplicate dispose. base.Dispose(disposing); // Call base class Dispose(). } } }