Исключение за пределами индекса при смене видео через список с помощью WindowsMediaPlayer c# winforms - PullRequest
1 голос
/ 25 января 2020

Я занимаюсь разработкой приложения, которое воспроизводит онлайн-потоки (файлы m3u) через WindowsMediaPlayer. Пользователь выбирает свой видеофайл, а затем все имена видеофайлов из файла сохраняются в listbox, поэтому пользователь может выбрать свое видео и начать его просмотр. Приложение также получает каждый http URL и помещает его в плейлист WMP. Проблема в том, что при выборе item из listbox возникает исключение. Наоборот media равно нулю.

Вот код:

WMPLib.IWMPPlaylist playlist = player.playlistCollection.newPlaylist(selectedforlist2);
WMPLib.IWMPMedia media;

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            itemisselected = true;

            int myIndex = listBox2.Items.IndexOf(listBox2.SelectedItems[0]);
            string mystring = myIndex.ToString();
            player.settings.setMode("Loop", true);

            if (listBox2.SelectedItem == null)
            {
                return;
            }




            if (player.currentMedia != null)
            {
                WMPLib.IWMPMedia media = player.currentPlaylist.get_Item(myIndex);  // <== Exception here
                player.Ctlcontrols.playItem(media);

            }

Код для добавления каждого URL в плейлист WMP:

                    if (line.StartsWith("h"))
                    {
                        http.Add(line);
                        media = player.newMedia(line);
                        playlist.appendItem(media);


                    }

Может ли кто-нибудь мне помочь? Спасибо

1 Ответ

0 голосов
/ 25 января 2020

Похоже, что это выдает ошибку:

listBox2.SelectedItems [0]

Я думаю, вам нужно подтвердить, что listBox2.SelectedItems существует и имеет хотя бы один элемент?

if ((listBox2.SelectedItems != null) && (listBox2.SelectedItems.Count > 0))
{
    // you can safely refer to listBox2.SelectedItems[0] now
    myIndex = listBox2.SelectedItems[0];

    // move the rest of your code inside the if statement
}

Пройдите код и получите счет в качестве теста:

// for debugging only
int count = listBox2.SelectedItems.Count;

[Редактировать: Сначала у вас ничего не получится, попробуйте еще раз] Некоторые сборы от Microsoft, которые COM основаны на 1, так что возможно: Player.GetCurrentPlayerList.get_Items (myIndex + 1);

...