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
都无法立即停止播放音乐
另外不想用委托,因为我音乐要在窗体启动的时候立即播放,使用委托会卡
求各位帮我解决一下,小弟感激不尽
展开
 我来答
析君豪2Q
2015-01-16 · TA获得超过411个赞
知道小有建树答主
回答量:724
采纳率:50%
帮助的人:199万
展开全部
用不用委托与卡不卡是两码事,如果是UI线程里的当然会卡如果是开一条线程就不会卡,还有就是你那个放声的Play是另外一个线程在放的吧,是异步的,所以你停止了当然线程也没用
追问
Play方法里面没有再开线程,用的是WindowsAPI里面的方法。另外我想没有立即停止音乐是因为,Thread.Sleep(WaitTime)方法 ,播放音乐的时候,就在这个线程Sleep的这段时间,无论用上面的哪个方法停止,都要等Thread.Sleep执行完以后才执行,有没有什么方法比Thread.Sleep(WaitTime)方法更好 ,既可以播放又可以立即停止
追答
WindowsAPI里是异步运行的,只能PlaySound(NULL,NULL,SND_FILENAME);再调一次
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式