public void Dispose() { if (m_Thread != null) { try { m_Finished = true; if (m_WaveOut != IntPtr.Zero) { WaveNative.waveOutReset(m_WaveOut); } m_Thread.Join(); m_FillProc = null; FreeBuffers(); if (m_WaveOut != IntPtr.Zero) { WaveNative.waveOutClose(m_WaveOut); } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } }