axWindowsMediaPlayer崩溃程序

时间:2015-06-01 19:54:00

标签: c# mp3 axwindowsmediaplayer

我正在尝试制作一个具有播放列表功能的MP3播放器,我在各处搜索过,尝试了一些示例,但没有任何效果。代码冻结的地方是调用p[ListBox1.SelectedIndex + 1];时,我不知道为什么它会锁定程序。我已经尝试制作一个数组并通过它选择下一首歌,但这也没有用。

我认为这是最简单的方法。但它出于某种原因锁定了程序。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Threading;
using System.Collections;

namespace MusicPlayer
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    string[] f, p;
    ArrayList playlist = new ArrayList();
    private int current_index = 0;

    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog open = new OpenFileDialog();

        if(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK){
            f = openFileDialog1.SafeFileNames;
            p = openFileDialog1.FileNames;

            for (int i = 0; i < f.Length; i++)
            {
                listBox1.Items.Add(f[i]);
            }

            foreach (string d in open.FileNames)
            {
                listBox1.Items.Add(d);
            }
        }
    }

    private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        axWindowsMediaPlayer1.URL = p[listBox1.SelectedIndex];
    }


    private void Form1_Load(object sender, EventArgs e)
    {
        axWindowsMediaPlayer1.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(MediaPlayer_PlayStateChange);
    }

    public void MediaPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        switch (axWindowsMediaPlayer1.playState)
        {
            // Locks up here
            case WMPLib.WMPPlayState.wmppsReady:
                axWindowsMediaPlayer1.URL = p[listBox1.SelectedIndex + 1];
                break;
            case WMPLib.WMPPlayState.wmppsStopped:
                axWindowsMediaPlayer1.URL = p[listBox1.SelectedIndex + 1];
                break;
            default:
                break;
        }
    }
}
}

编辑:

我更新了我的代码,这就是它的样子:

public void MediaPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
 switch (axWindowsMediaPlayer1.playState)
 {
   case WMPLib.WMPPlayState.wmppsReady:                                     
    axWindowsMediaPlayer1.BeginInvoke(new Action(change_song));
    break;
    case WMPLib.WMPPlayState.wmppsStopped:
     axWindowsMediaPlayer1.BeginInvoke(new Action(change_song));
     break;
     default:
     break;
}
}

void change_song()
{
  axWindowsMediaPlayer1.URL = p[listBox1.SelectedIndex + 1];
}

但是当我运行它时,它会陷入“媒体变化”并最终无效。

0 个答案:

没有答案