需要停止线程语法执行而不阻塞整个进程。a Noob &奇怪的问题。C#在不阻塞进程的情况下停止线程语法执行
说明: 有一个线程运行以及记录了具有地方等到录制结束停止处理声音。 StopIt()
是Recorder()
方法,我需要在waveIn.StartRecord()
之后和 StopIt()
之前暂停语法执行,直到bool StopRecording
翻转。
问题:整个StopIt()
需要花上一段时间来完成它的工作,但我需要立即重新启动的过程中不会丢失即将到来的田径的第一个字节,所以我需要把在两个Recorder()
和StopIt()
同一个线程能够访问数据,并且能够在另一个线程中运行相同的进程,以在第一个线程完成其作业时不丢失任何数据。
尝试: 试图解决许多问题“错误的,但它可能工作”方式,如: while (StopRecording) {}
但他们造成了许多的问题。
验证码:
void Recorder()
{
waveIn = new WasapiLoopbackCapture();
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += waveIn_RecordingStopped;
Writer = new LameMP3FileWriter(ExportFolder + @"\" + titleSongName + ".mp3", waveIn.WaveFormat, BitRate);
waveIn.StartRecording();
//Need The Pause Here
StopIt();
}
void StopIt()
{
// while (StopRecording == true) { }
waveIn.StopRecording();
Writer.Flush();
waveIn.Dispose();
Writer.Dispose();
Tagger();
}
static void waveIn_RecordingStopped(object sender, StoppedEventArgs e)
{
// signal that recording has finished
stopRecording = true;
}
static void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
// write recorded data to MP3 writer
if (Writer != null)
Writer.Write(e.Buffer, 0, e.BytesRecorded);
}
为什么不能在'waveIn_RecordingStopped'中调用'StopIt()'? –
'syntax'是什么意思? –
@YeldarKurmangaliyev waveIn_Recording StopIt()被调用时抛出的rasies(用于提高waveIn_DataAvailable以将数据刷新到文件) –