public partial class MainWindow : Window RecordController record = new RecordController(); bool startRecord = false ; public MainWindow() InitializeComponent(); private void Button_Click( object sender, RoutedEventArgs e) if (! startRecord) record.StartRecord( " D:\\rec.wav " ); startRecord = true ; record.StopRecord(); startRecord = false ; /// <summary> /// 录音功能控制类 /// </summary> public class RecordController public WaveIn mWavIn; public WaveFileWriter mWavWriter; /// <summary> /// 开始录音 /// </summary> /// <param name="filePath"></param> public void StartRecord( string filePath) mWavIn = new WaveIn(); mWavIn.DataAvailable += MWavIn_DataAvailable; mWavIn.RecordingStopped += MWavIn_RecordingStopped; mWavWriter = new WaveFileWriter(filePath, mWavIn.WaveFormat); mWavIn.StartRecording(); /// <summary> /// 停止录音 /// </summary> public void StopRecord() mWavIn ? .StopRecording(); mWavIn ? .Dispose(); mWavIn = null ; mWavWriter ? .Close(); mWavWriter = null ; private void MWavIn_RecordingStopped( object sender, StoppedEventArgs e) mWavIn ? .Dispose(); mWavIn = null ; mWavWriter ? .Close(); mWavWriter = null ; private void MWavIn_DataAvailable( object sender, WaveInEventArgs e) mWavWriter.Write(e.Buffer, 0 , e.BytesRecorded); int secondsRecorded = ( int )mWavWriter.Length / mWavWriter.WaveFormat.AverageBytesPerSecond;