Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Wav文件播放冻结GUI_C#_User Interface_File_Wav_Freeze - Fatal编程技术网

C#Wav文件播放冻结GUI

C#Wav文件播放冻结GUI,c#,user-interface,file,wav,freeze,C#,User Interface,File,Wav,Freeze,问题:wav文件播放,但GUI根本没有响应。lbl_PhonoString.Text不是每次循环都更新。在所有文件完全播放之前,用户无法暂停或取消 我知道我必须使用seaparate线程来播放Wav文件。我对穿线一点也不熟悉。有人能建议我在这里做什么吗 我的代码: //==================================================== bool bPause = false, bCancel = false; private void btn_DicSta

问题: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();
}
//====================================================
//====================================================
bool bPause=false,bCancel=false;
私有无效btn\u DicStart\u单击(对象发送方,事件参数e)
{
PlayWave(“StartProgram.WAV”);

对于(int i=0;i基本上是同一个问题,公认的答案是你的答案。简而言之,是的,你应该在一个单独的线程中执行所有长时间运行的进程,否则它们会阻塞用户界面,或者当然会使用BackgroundWorker。

有人能指导如何使用多线程吗?