需要停止線程語法執行而不阻塞整個進程。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以將數據刷新到文件) –