public CarenResult PararCapturaDados() { //Variavel que vai retornar o resultado. CarenResult Resultado = new CarenResult(ResultCode.ER_FAIL, false); //Define para parar de capturar os dados. StatusCapturandoDados = false; //Aguarda um tempo até todos os dados tiverem sido escritos. while (Task_ReadDataDispositivo.Status == TaskStatus.Running) { WinFuncs.SleepNativo(100); } //Chama o método para parar o dispositivo de captura. Resultado = myCaptureAudio.AudioClientConfig.Stop(); //Verifica se obteve sucesso if (Resultado.StatusCode != ResultCode.SS_OK) { //A operação falhou. //Mostra uma mensagem de erro. ShowMensagem( "Ocorreu uma falha ao pedir ao dispostivo de captura que parasse. Mensagem de erro -> " + Resultado.ObterMensagem((int)Resultado.HResult), true); //Sai do método goto Done; } //Aguarda o escritor de dados terminar de escrever todos os dados. while (ListaBuffersAudio.Count != 0) { WinFuncs.SleepNativo(100); } //Define para parar de escrveer dados. StatusGeral = false; StatusEscritorDados = false; //Faz um delay WinFuncs.SleepNativo(500); //Chama o método para finalizar a criação do arquivo. Resultado = FinalizarArquivoWav(); //Verifica se obteve sucesso if (Resultado.StatusCode != ResultCode.SS_OK) { //A operação falhou. //Mostra uma mensagem de erro. ShowMensagem( "Ocorreu uma falha ao terminar de definir os dados do header do arquivo final. Mensagem de erro -> " + Resultado.ObterMensagem((int)Resultado.HResult), true); //Sai do método goto Done; } //Define sucesso na operação. Resultado.AdicionarCodigo(ResultCode.SS_OK, true); //Reverte todas as informações. WinFuncs._AvRevertMmThreadCharacteristics(myCaptureAudio.HandleTaskPrioridade); WinFuncs._TimeEndPeriod(5); Done :; //Retorna o resultado. return(Resultado); }