Ошибка с музыкальным плеером (С#)

При запуске плеера, все кнопки работают правильно, после запуска песни при помощи кнопки play все так же работает стабильно, но при повторном нажатии клавиши, приложение запускает ещё один раз эту же песню и они начинают играть одновременно, в следствии чего приложение крашится

button 3 - play \ pause, button 5 - filedrop

Код:

public partial class Form1 : Form
    {
        public string path;
        public int quantity = 0;
        WMPLib.WindowsMediaPlayer Player;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Player = new WMPLib.WindowsMediaPlayer();
            Player.URL = path;

            quantity++;
            string startPath = Application.StartupPath;

            if (quantity % 2 != 0)
            {
                startPath += "/pause.png";
                button3.Image = Image.FromFile(startPath);
                button3.ImageAlign = ContentAlignment.MiddleCenter;
                Player.controls.play();
            }
            else
            {
                startPath += "/play.png";
                button3.Image = Image.FromFile(startPath);
                button3.ImageAlign = ContentAlignment.MiddleCenter;
                Player.controls.pause();
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            string filename = openFileDialog1.SafeFileName;
            path = openFileDialog1.FileName;
            label5.Text = filename;
        }
    }

Ответы (1 шт):

Автор решения: aepot

Как-то так это может выглядеть. Не проверял, делал по документации.

public partial class Form1 : Form
{
    private WMPLib.WindowsMediaPlayer Player;
    private Image pauseImage;
    private Image playImage;
    private bool isPlaying;

    public Form1()
    {
        InitializeComponent();
        button3.ImageAlign = ContentAlignment.MiddleCenter;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Player = new WMPLib.WindowsMediaPlayer();
        Player.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange);
        Player.MediaError += new WMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError);

        string startPath = Application.StartupPath;
        pauseImage = Image.FromFile(Path.Combine(startPath, "pause.png"));
        playImage = Image.FromFile(Path.Combine(startPath, "play.png"));
        button3.Image = playImage;
    }

    private void Player_PlayStateChange(int newState)
    {
        isPlaying = (WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsPlaying;
        if (isPlaying)
             button3.Image = pauseImage;
        else
             button3.Image = playImage;
    }

    private void Player_MediaError(object pMediaObject)
    {
        MessageBox.Show($"Cannot play media file {Player.URL}.");
    }

    private void button3_Click(object sender, EventArgs e)
    {
        if (isPlaying)
            Player.controls.pause();
        else
            Player.controls.play();
    }

    private void button5_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            if (isPlaying)
                Player.controls.pause();
            label5.Text = openFileDialog1.SafeFileName;
            Player.URL = openFileDialog1.FileName;
        }
    }
}
→ Ссылка