C# Mediaplayer WinForm赢得';不玩
我有一个代码,它检查一首歌是否已经结束,是否已经结束,并选择下一首歌。我在列表框中有歌曲名称,因此当选择下一首歌曲时,第一个函数将触发。你能解释一下为什么它不放这首歌吗C# Mediaplayer WinForm赢得';不玩,c#,winforms,media-player,C#,Winforms,Media Player,我有一个代码,它检查一首歌是否已经结束,是否已经结束,并选择下一首歌。我在列表框中有歌曲名称,因此当选择下一首歌曲时,第一个函数将触发。你能解释一下为什么它不放这首歌吗 private void Files_SelectedIndexChanged(object sender, EventArgs e) { player.URL = percorsi[Files.SelectedIndex]; } private void player_PlayStateChange(object s
private void Files_SelectedIndexChanged(object sender, EventArgs e)
{
player.URL = percorsi[Files.SelectedIndex];
}
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent er)
{
if (er.newState == 8)
{
Files.SetSelected((Files.SelectedIndex + 1) % nomi.Length , true);
}
}
Microsoft的URL属性帮助页有以下注释 不要从事件处理程序代码调用此方法。从事件处理程序调用URL可能会产生意外结果 你也可以看到前一篇文章 我提出的解决方案虽然不是最好的,但就是在表单上创建一个计时器并实现_Tick处理程序。然后在表单中,我还创建了一个布尔值(初始化为false),以指示应该播放一个新文件
private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 8)
{
Files.SelectedIndex = File.SelectedIndex + 1;
}
}
private void Files_SelectedIndexChanged(object sender, EventArgs e)
{
playNewFile = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (playNewFile)
{
axWindowsMediaPlayer1.URL = percorsi[Files.SelectedIndex];
playNewFile = false;
}
}
我将计时器间隔设置为100毫秒,并在Form_Load事件中启动它
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 100;
timer1.Start();
}