2010-09-17 53 views
0

問題:wav文件播放,但GUI根本沒有響應。每個循環都不更新lbl_PhonoString.Text。用戶無法暫停或取消,直到所有文件完全播放。C#Wav文件播放凍結GUI

我知道我必須使用海洋風格的線程來播放Wav文件。我對線程並不熟悉。有人可以建議我應該在這裏做什麼?

我的代碼:

//==================================================== 
bool bPause = false, bCancel = false; 

private void btn_DicStart_Click(object sender,EventArgs e) 
{ 
    PlayWave("StartProgram.WAV"); 
    for(int i=0;i<10;i++) 
    { 
     lbl_PhonoString.Text=i.ToString(); 
     PlayWave("NextSound.WAV"); 
     PlayWave("Clue"+i.ToString()+".WAV"); 

     //Check if user pressed pause/cancel 
     while(bPause); 

     if(bCancel) 
      break; 
    } 
} 

private void btn_Pause_Click(object sender,EventArgs e) 
{ 
    bPause=!bPause; 
    if(!bPause) 
     btn_Pause.Text ="PAUSE"; 
    else 
     btn_Pause.Text ="CONTINUE"; 
} 

private void btn_Cancel_Click(object sender,EventArgs e) 
{ 
    bCancel=true; 
} 

//Play the Wave File 
private void PlayWave(string WaveFile) 
{ 
    System.Media.SoundPlayer myPlayer=new System.Media.SoundPlayer(); 
    myPlayer.SoundLocation=WaveFile; 
    myPlayer.PlaySync(); 
} 
//==================================================== 
+0

有人可以指導如何使用多線程? – user450143 2010-09-17 01:45:58

回答

2

Look here本質上是同樣的問題,接受的答案是你的答案。簡而言之,是的,您應該在單獨的線程中執行所有長時間運行的進程,否則會阻止用戶界面,或者使用BackgroundWorker。