2010-03-02 2 views
1

у меня есть следующий код ....управления для каждого цикла в Visual Basic

For Each dgvRow In bout_grid.Rows 
      vfile = dgvRow.Cells("FileName").Value 
      video.FileName = "D:\bee\" + vfile 

      vduration = video.Duration 
      vposition = video.Position 

      If vduration > 0 The 
       bplayer_out.URL = "D:\bee\" + vfile 
       bplayer_out.Ctlcontrols.play() 
      End If 

     Next dgvRow 

но он играет только один видео и чем остановок, но я хочу, что она должна играть все видео в DataGridView т.е. bout_grid .. ..я попробовал

System.Threading.Thread.Sleep = vduration 

, но он останавливает все, как я могу решить

ответ

2

Да, вы не можете сделать этот вид кода в приложении Windows Forms или WPF. Приложения Windows управляются событиями, вы не можете программировать длинные циклы, не блокируя обновления пользовательского интерфейса.

Проигрыватель Windows Media генерирует события, когда произошло что-то существенное. Как PlayStateChange event. Напишите обработчик события для этого события, чтобы индексировать следующий элемент в своем списке. Обратите внимание, что WMP также поддерживает списки воспроизведения.

Ваш последний ресурс для программирования WMP в Visual Basic - это MSDN Library topic. Взгляните на предоставленные образцы.

1

Что происходит после того, как bplayer_out.Ctlcontrols.play() отделка эс? Появится диалоговое окно? Исключение? Оба этих результата остановили бы для каждого цикла.

запустить его с помощью отладчика и увидеть, где управление возвращается после bplayer_out.Ctlcontrols.play()

+0

Когда он заканчивается, он перестает играть и остается в остановленном положении ... –

+0

Если вы закроете bplayer_out после окончания воспроизведения видео, элемент управления должен вернуться в каждом цикле. Это похоже на открытие нового (модального) окна сообщений - вы не можете продолжать работу до тех пор, пока не отклоните окно сообщения. Если вы не хотите, чтобы вы остановились на каждом цикле, вы должны использовать другой поток для воспроизведения/очередности воспроизведения видео. Или есть метод bplayer_out.Ctlcontrols.queueVideo? – Ando

+0

Возможно, вы можете пройти через все ячейки, составить список видео для воспроизведения и передать это в bplayer_out.Ctlcontrols (поведение должно состоять в том, что игрок начинает воспроизводить первое видео, а затем продолжает второй, но все это зависит на том, что боксирует с этим bplayer (какой тип это? :))) – Ando

1

Вполне возможно, что bplayer_out.Ctlcontrols.play() является асинхронным, как и многие другие звуковые API. Поэтому возможно, что следующий звук сразу же воспроизводится, пока первый еще занят - вы можете просто услышать первый.

Какой тип bplayer?

Смежные вопросы