2016-02-28 111 views
2

这是我无法工作的代码片段。我试图做的是让Windows媒体播放器播放AVI,当它完成播放时,我想让Windows媒体播放器变成“隐形”,直到下一次需要播放AVI。在隐藏媒体播放器之前,如何让代码等待AVI电影完成播放? Visual Basic 6

If brodyfile = 1 Then 'check character in file and play correct video. 

     WindowsMediaPlayer1.URL = (App.Path & "\brody1.avi") 'play video 

下面的这一行不起作用。我如何等待Windows媒体播放器在隐形之前完成播放avi?

 While WindowsMediaPlayer1.playState = wmppsPlaying ' This line never works 

     Sleep (500) 

     Wend 

     WindowsMediaPlayer1.uiMode = "invisible" ' This happens before AVI finishes playing. 

    Endif 

回答

2

不工作的原因是因为视频开始播放需要很短的时间。当它到达你的while语句时,视频还没有开始播放,所以它的PlayState不会是wmppsPlaying。

您不应该使用睡眠,因为它会阻止UI的更新。最好使用定时器控制。

这是我的建议。计时器每秒检查一次状态,但也不会进行第一次检查,因此视频应该有时间开始。如果视频是从需要很长时间加载的源加载的,则可能必须创建一个计时器来检查视频开始播放,然后再检查视频以停止播放。

Private Sub Command1_Click() 
    Me.WindowsMediaPlayer1.URL = (App.Path & "\brody1.avi") 

    Me.Timer1.Interval = 1000 
    Me.Timer1.Enabled = True 
End Sub 

Private Sub Timer1_Timer() 
    Dim videoIsPlaying As Boolean 

    videoIsPlaying = Me.WindowsMediaPlayer1.PlayState = wmppsPlaying 

    If Not videoIsPlaying Then 
     Me.Timer1.Enabled = False 
     'Hide it here 
    End If 

结束子