C#Wav文件播放冻结GUI

时间:2010-09-17 01:23:13

标签: c# user-interface file wav freeze

问题:wav文件播放,但GUI根本没有响应。每个循环都不会更新lbl_PhonoString.Text。在完全播放完所有文件之前,用户无法暂停或取消。

我知道我必须使用seaparate线程来播放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();
}
//====================================================

1 个答案:

答案 0 :(得分:2)

Look here基本上是同一个问题,接受的答案就是答案。简而言之,是的,您应该在单独的线程中执行所有长时间运行的进程,否则它们将阻止UI,或者当然使用BackgroundWorker。