鱼C论坛

 找回密码
 立即注册
查看: 2460|回复: 1

多线程放音乐

[复制链接]
发表于 2020-12-7 16:37:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如我有两个按键
我一个按键对应的函数:是放一首歌,

                               
登录/注册后可看大图

但是我点击第一个按键,放第一首歌,点第二个按键第一首就停了,再放第二首。

所有我该怎么 按第一个按键放第一首歌,然后按第二个按键,第一首歌没有停,继续放第二首歌

还是说 怎么去对线程这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-22 10:30:13 | 显示全部楼层
这...好家伙,我连PlaySound是个什么类都不知道...
所以我自己写了一个
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestForUI
{
    public class PlaySound
    {
        public static SoundPlayer Play(string wavPath)
        {
            SoundPlayer sp = new SoundPlayer(wavPath);
            sp.Load();
            sp.PlayLooping();
            return sp;
        }

        public static void Pause(SoundPlayer sp)
        {

        }

        public static void Stop(SoundPlayer sp)
        {
            if (sp == null)
            {
                return;
            }
            sp.Stop();
        }
    }
    public partial class Form1 : Form
    {
        private int soundPlaying = 0;
        Thread[] threadPool = new Thread[2];
        public Form1()
        {
            this.InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (soundPlaying != 1)
            {
                threadPool[1].Abort();
                soundPlaying = 1;
                threadPool[1] = null;
                threadPool[0] = new Thread(new ParameterizedThreadStart(this.Play));
                threadPool[0].Start(soundPlaying);
            }
            else
            {
                threadPool[0].Abort();
                soundPlaying = 2;
                threadPool[0] = null;
                threadPool[1] = new Thread(new ParameterizedThreadStart(this.Play));
                threadPool[1].Start(soundPlaying);
            }
        }

        private void Play(object obj)
        {
            int id = (int)obj;
            SoundPlayer sp = null;
            try
            {
                if (id == 1)
                {
                    sp = PlaySound.Play(@"./wav/A1.wav");
                }
                else
                {
                    sp = PlaySound.Play(@"./wav/A2.wav");
                }
                while (true) ;
            }
            catch (ThreadAbortException)
            {
                if (id == 1)
                {
                    PlaySound.Stop(sp);
                }
                else
                {
                    PlaySound.Stop(sp);
                }
            }
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 17:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表