Как воспроизвести следующий элемент в плейлисте с помощью axmediaplayer? - PullRequest
2 голосов
/ 03 февраля 2012

хорошо, у меня есть вопрос, я создал этот код, чтобы играть на базе axmediaplayer на предмете, указанном в списке. сначала я делаю этот код, чтобы составить список с помощью opendialog:

 private string[] files, path;
 private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            files = openFileDialog1.SafeFileNames;
            path = openFileDialog1.FileNames;
            for (int i = 0; i < files.Length; i++) {
                listBox1.Items.Add(files[i]);
            }
        }
    }

и затем он воспроизводит музыку при изменении индекса списка (когда элемент в окне списка щелкает), используя этот код:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    axWindowsMediaPlayer1.URL = path[listBox1.SelectedIndex];
}

все работает нормально, а затем я хочу, чтобы плеер автоматически перешел к следующей песне на основе элемента в моем списке. с использованием событий PlayStateChange, поэтому я делаю этот код

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
    if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded) 
    {
         if(listBox1.SelectedIndex < files.Length - 1)
         {
            listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
         }
    }
}

выбранное изменение индекса, но проигрыватель не воспроизводит следующую песню автоматически. Я должен нажать кнопку воспроизведения вручную, чтобы воспроизвести список. кто-нибудь может помочь мне встать?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

хорошо, я нашел это, решение состоит в том, чтобы добавить таймер перед воспроизведением следующей песни. сначала я добавляю таймер, который должен быть timer1. а затем я изменяю событие playstate на что-то вроде этого:

private void axWindowsMediaPlayer1_PlayStateChange(object sender, axWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {
            timer1.Interval = 100;
            timer1.Enabled = true;               
        }            
     }

затем по таймеру я добавляю тиковое событие, тиковое событие выглядит примерно так:

 private void timer1_Tick(object sender, EventArgs e)
    {
        if (listBox1.SelectedIndex < files.Length - 1)
        {
            listBox1.SelectedIndex++;
            timer1.Enabled = false;
        }
        else
        {
            listBox1.SelectedIndex = 0;
            timer1.Enabled = false;
        }            
    }       

теперь работает нормально ^^

0 голосов
/ 09 августа 2016

Ниже функционал работал у меня :

    private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsMediaEnded)
        {

            timer1.Interval = 100;
            timer1.Start();
            timer1.Enabled = true;   
            timer1.Tick += timer1_Tick;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        /// method to play video list items
        myFuntiontoPlayVideo();
        timer1.Enabled = false;
    }     
...