Cav Wav File Play зависает графический интерфейс - PullRequest
0 голосов
/ 17 сентября 2010

Проблема: wav-файлы воспроизводятся, но GUI вообще не отвечает. Lbl_PhonoString.Text не обновляется каждый цикл. Пользователь не может приостановить или отменить, пока все файлы не будут воспроизведены полностью.

Я знаю, что для воспроизведения файла 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 Ответ

2 голосов
/ 17 сентября 2010

Смотрите здесь по сути тот же вопрос, и принятый ответ - ваш ответ. В двух словах: да, вы должны выполнять все длительные процессы в отдельном потоке, иначе они будут блокировать пользовательский интерфейс или, конечно, использовать BackgroundWorker.

...