public void Dispose() { if (m_Header.lpData != IntPtr.Zero) { WaveOutBase.waveOutUnprepareHeader(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)); m_HeaderHandle.Free(); m_Header.lpData = IntPtr.Zero; } m_PlayEvent.Close(); if (m_HeaderDataHandle.IsAllocated) { m_HeaderDataHandle.Free(); } GC.SuppressFinalize(this); }