private void m_recmw_WaveDoneMessage(object sender, IntPtr wParam, IntPtr lParam) { #if !NDOC // Retrieve Waveheader object by the lpHeader pointer Monitor.Enter(m_HandleMap.SyncRoot); WaveHeader hdr = m_HandleMap[lParam.ToInt32()] as WaveHeader; m_HandleMap.Remove(hdr.Header.ToInt32()); Monitor.Exit(m_HandleMap.SyncRoot); // unprepare the header CheckWaveError(Wave.waveInUnprepareHeader(m_hWaveIn, hdr.Header, hdr.HeaderLength)); hdr.RetrieveHeader(); m_qBuffers.Enqueue(hdr); if (recordingFinished) // last chunk { DumpRecordBuffers(); CheckWaveError(Wave.waveInClose(m_hWaveIn)); WaveChunk wck = m_ck[0] as WaveChunk; if (wck != null) { DataChunk dck = wck.FindChunk(FourCC.Data) as DataChunk; if (dck != null) { dck.EndWrite(); } wck.EndWrite(); } m_ck.EndWrite(); m_streamRecord.Close(); // clean up the messageWindow m_recmw.Dispose(); // reset the global flag recording = false; // set our event if (DoneRecording != null) { DoneRecording(); } foreach (WaveHeader whdr in m_HandleMap.Values) { whdr.Dispose(); } m_HandleMap.Clear(); } else { hdr = GetNewRecordBuffer(m_recBufferSize); CheckWaveError(Wave.waveInAddBuffer(m_hWaveIn, hdr.Header, hdr.HeaderLength)); DumpRecordBuffers(); } #endif }