public int Disconnect() { try { OnDisconnect(); if (_ConnectedPin != null) { _ConnectedPin.BeginFlush(); //_ConnectedPin.EndOfStream(); // deadlock - dont do this. _ConnectedPin.Disconnect(); _ConnectedPin.EndFlush(); } if (_ConnectedPin != null && Marshal.IsComObject(_ConnectedPin)) { GC.ReRegisterForFinalize(_ConnectedPin); Marshal.FinalReleaseComObject(_ConnectedPin); } _ConnectedPin = null; } catch (Exception x) { Debug.WriteLine("Failed to disconnect pin " + x); } return((int)HRESULT.S_OK); // Disconnect must not fail }