我正在VB.Net 2019中创建一个小表单应用程序,它将扫描我的硬盘驱动器中的MP3文件,然后以随机顺序播放它们。此刻,我扫描我的磁盘并将所有内容加载到两个列表框中(一个用于路径,一个用于文件名,因为我也想以CSV格式导出)。在未来的某一天,这些数据将被放到一个带有额外信息的数据库中,这样我就可以选择我想在那一刻随机播放的音乐类型。
当我点击cmdRandom命令按钮时,第一个文件开始播放,但当我想继续播放下一个随机文件时,该文件被搜索并加载到媒体播放器中,但没有开始播放(我必须手动点击 "播放")。
Private Sub cmdRandom_Click(sender As Object, e As EventArgs) Handles cmdRandom.Click
intaantal = ListBox2.Items.Count
Randomize()
PlayMedia()
End Sub
Private Sub PlayMedia()
intNumber = CInt(Int((intAantal * Rnd()) + 1))
ListBox1.SelectedIndex = intNumber
ListBox2.SelectedIndex = intNumber
FileName = ListBox1.SelectedItem.ToString() + "\" + ListBox2.SelectedItem.ToString()
lblSongText.Text = FileName
' mPlayer.URL = ""
' mPlayer.Refresh()
' mPlayer.close()
' mPlayer.settings.autoStart = True
' mPlayer.settings.setMode("loop", True)
' mPlayer.Ctlcontrols.play()
mPlayer.URL = FileName
End Sub
Private Sub mPlayer_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles mPlayer.PlayStateChange
If mPlayer.playState = mPlayer.playState.wmppsMediaEnded Then
PlayMedia()
End If
End Sub
PlayMedia()中所有被注释掉的项目都已经被测试过了,但是没有工作。我想在其中添加 mPlayer.Ctlcontrols.play() 在mPlayer_playStateChange()函数中,在当前if的else子句中可以工作,但这给了我一个编译错误(似乎在这个事件中不允许)。
我到底做错了什么?
在网上又搜索了一下,找到了解决方案:(https:/social.msdn.microsoft.comForumssqlserveren-US31082234-7161-4446-a96e-32c0314dfe0factions-when-a-media-player-control-finished-playing?forum=vbgeneral). 这一切都与第一首歌曲结束和下一首歌曲加载之间的时间有关.我添加了一个定时器,现在事情已经解决了,我将定时器的间隔时间设置为100。
Private Sub mPlayer_PlayStateChange(sender As Object, e As _WMPOCXEvents_PlayStateChangeEvent) Handles mPlayer.PlayStateChange
If mPlayer.playState = mPlayer.playState.wmppsMediaEnded Then
mPlayer.Ctlcontrols.stop()
Timer1.Start()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Stop()
PlayMedia()
End Sub