C# 停止播放线程中的音乐
我试图使多个音频文件同时播放,所以我决定使用线程来触发它们(否则,只有在上一个音频文件完成后才能开始播放) 我就是这样做的 声音是声音播放器的列表C# 停止播放线程中的音乐,c#,multithreading,audio,C#,Multithreading,Audio,我试图使多个音频文件同时播放,所以我决定使用线程来触发它们(否则,只有在上一个音频文件完成后才能开始播放) 我就是这样做的 声音是声音播放器的列表 for (int i = 0; i < sometimes; i++) { SoundPlayer sp = sounds[i]; Thread thread = new Thread(() => { sp.PlayLooping(); }); threads.Add(thread)
for (int i = 0; i < sometimes; i++)
{
SoundPlayer sp = sounds[i];
Thread thread = new Thread(() =>
{
sp.PlayLooping();
});
threads.Add(thread);
}
foreach (Thread thread in threads)
{
thread.Start();
}
我从中获得了kill_线程方法。
当messagebox弹出消息时,目标线程已经以这种方式被终止。然而,音乐仍在继续播放
有没有办法停止音乐?
提前谢谢 这是因为PlayLooping()方法本身启动了一个新线程,因此终止线程不会停止播放器线程
你不应该杀死任何线程,不管是你的线程还是其他线程。事实上,您甚至不应该创建线程。正如其他人所说,如果必须结束线程,请优雅地结束它,不要通过
中止
对其进行核爆。它可能使您的进程处于未知状态
只要打电话:
soundPlayer.Stop();
MSDN:
SoundPlayer.PlayLooping方法
.wav将一直播放,直到调用Stop方法为止
至于并发播放,SoundPlayer
并不是为精心设计的并发播放而设计的(事实上它甚至不会这样做)。为此,您需要使用不同的媒体API
另见
- Microsoft DirectShow(从90年代开始出现;坚如磐石;是媒体服务器和媒体中心的一部分;COM API;虽然没有管理,但COM很容易从.NET调用) <> >媒体基础(新的区块儿童,没有托管API)
sp.Stop()
可能有用吗?@BWA我想了想。但我很感兴趣的是,为什么音频文件的线程被终止后仍在播放。可能是SoundPlayer创建了自己的线程?…使用新线程播放并循环.wav文件,如果未加载,则首先加载.wav文件。。。我只是想说。我通常不支持教条,但Thread.Abort()
是邪恶的。请阅读我对这个问题的描述。创建线程是同时播放多个音乐,而不是“播放一个音乐”@jiecewei还有你的标题明确地说“停止播放线程中的音乐”和你的身体“有没有办法停止音乐?”我已经介绍过了,而不是“同时播放多个音乐”SoundPlayer
不是为精心设计的并发播放而设计的。为此,您需要使用不同的媒体API。请随便问一个新问题是的,我发现了这个问题。我听不到音频文件同时播放,只有最后一个。我会考虑一个新的API
soundPlayer.Stop();