Ошибка с музыкальным плеером (С#)
При запуске плеера, все кнопки работают правильно, после запуска песни при помощи кнопки 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;
}
}
}