public virtual void Dispose() { NetworkInterface.OnGetTotalHashrate -= NetworkInterface_OnGetTotalHashrate; NetworkInterface.OnGetMiningParameterStatus -= NetworkInterface_OnGetMiningParameterStatus; NetworkInterface.OnNewChallenge -= NetworkInterface_OnNewChallenge; NetworkInterface.OnNewTarget -= NetworkInterface_OnNewTarget; NetworkInterface.OnStopSolvingCurrentChallenge -= NetworkInterface_OnStopSolvingCurrentChallenge; if (m_hashPrintTimer != null) { try { m_hashPrintTimer.Elapsed -= HashPrintTimer_Elapsed; m_hashPrintTimer.Dispose(); } catch { } m_hashPrintTimer = null; } try { if (Devices != null) { Devices.AsParallel(). ForAll(d => d.Dispose()); } } catch { } try { NetworkInterface.Dispose(); } catch { } }