C#Winform立即停止子线程中播放的音乐
boolisStop=false;PlayMusic(){Play(歌曲路径)if(isStop)PlayStop();Threed.sleep(waitTime)if(...
bool isStop=false;
PlayMusic()
{
Play(歌曲路径)
if(isStop)
PlayStop();
Threed.sleep(waitTime)
if(isStop)
PlayStop();
Play(另外一首歌)
if(isStop)
PlayStop();
Threed.Sleep(waitTime)
if(isStop)
PlayStop();
}
在主线程中调用
Thread t=new Thread(PlayMusic)
t.isbackgroup=true;
t.start();
现在问题来了,我用按钮点击一下想立即停止播放音乐,但是
无论我在主线程中将waitTIme设为0
还是我在主线程中将把Thread t 提到class中定义,然后用t.abort();t.join();
还是用isStop=true
都无法立即停止播放音乐
另外不想用委托,因为我音乐要在窗体启动的时候立即播放,使用委托会卡
求各位帮我解决一下,小弟感激不尽 展开
PlayMusic()
{
Play(歌曲路径)
if(isStop)
PlayStop();
Threed.sleep(waitTime)
if(isStop)
PlayStop();
Play(另外一首歌)
if(isStop)
PlayStop();
Threed.Sleep(waitTime)
if(isStop)
PlayStop();
}
在主线程中调用
Thread t=new Thread(PlayMusic)
t.isbackgroup=true;
t.start();
现在问题来了,我用按钮点击一下想立即停止播放音乐,但是
无论我在主线程中将waitTIme设为0
还是我在主线程中将把Thread t 提到class中定义,然后用t.abort();t.join();
还是用isStop=true
都无法立即停止播放音乐
另外不想用委托,因为我音乐要在窗体启动的时候立即播放,使用委托会卡
求各位帮我解决一下,小弟感激不尽 展开
展开全部
用不用委托与卡不卡是两码事,如果是UI线程里的当然会卡如果是开一条线程就不会卡,还有就是你那个放声的Play是另外一个线程在放的吧,是异步的,所以你停止了当然线程也没用
追问
Play方法里面没有再开线程,用的是WindowsAPI里面的方法。另外我想没有立即停止音乐是因为,Thread.Sleep(WaitTime)方法 ,播放音乐的时候,就在这个线程Sleep的这段时间,无论用上面的哪个方法停止,都要等Thread.Sleep执行完以后才执行,有没有什么方法比Thread.Sleep(WaitTime)方法更好 ,既可以播放又可以立即停止
追答
WindowsAPI里是异步运行的,只能PlaySound(NULL,NULL,SND_FILENAME);再调一次
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |