2012-12-07 7 views

답변

1

PlayAllowed Doo-Wop은 이벤트에서 다른 작업을 수행하도록 요청할 때 까다로운 동작을 피하기 위해 hackorama입니다. 종종 잘못되었으므로 이벤트를 발사 할 때 바닥 매트가 갑자기 흔들리는 것을 기대하지 않습니다. 기술적 인 용어는 매우 일반적인 문제 인 재입국을 잘 처리하지 못한다는 것입니다.

문제-entrancy 재하는 아주 우아한 해결책이있다는 키는 이벤트가 발생한 후 다시 같은 곡을 연주 할 수 요청을 지연 것입니다. Winforms에서 Control.BeginInvoke()를 사용하면 쉽게 지연을 얻을 수 있습니다. 목표가 모두 정상적으로 돌아 오면 실행됩니다. 그 기술 용어는 "프로그램이 메시지 루프를 다시 입력하기를 기다리고 있습니다"입니다. 그것은 아주 잘 당신과 일치하지 때문에 필요에 따라

Public Class Form1 
    Dim WithEvents Player3 As New WMPLib.WindowsMediaPlayer 
    Dim Song As String = "c:\temp\ding.wav" 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     PlayCurrentSong() 
    End Sub 

    Private Sub Player3_PlayStateChange(ByVal NewState As Integer) Handles Player3.PlayStateChange 
     If NewState = WMPLib.WMPPlayState.wmppsMediaEnded Then 
      Me.BeginInvoke(New MethodInvoker(AddressOf PlayCurrentSong)) 
     End If 
    End Sub 

    Private Sub PlayCurrentSong() 
     Player3.URL = Song 
     Player3.controls.play() 
    End Sub 
End Class 

코드를 조정할 : 그건 내가 윈도우 8 테스트 코드와 또 다시 같은 노래를 반복 아무런 문제가 없었다,이 코드에 매우 잘 작동 . 중요한 부분은 PlayStateChanged 이벤트 핸들러에서 Me.BeginInvoke() 호출입니다.

+1

매력처럼 작동합니다! 매우 감사. – ahota

+0

lol^tenmorechar – Dylansq

0

나는이 문제에 관심이 많습니다. 문제는 너무 열심히 시도하는 것입니다. 캡슐화 된 MP3 플레이어 파일의 내용을 분석하면 사운드 장벽이 바이너리 디지털 대신 아날로그 파일로 변환된다는 것을 알 수 있습니다. 이 문제는 "WMP"에 할당 된 경우에만 비디오 - 오디오 재생이라고 말합니다. 당신이 opperating 시스템을 전환하는 경우 작동 할 수도 있지만 전진하고 그냥 새 컴퓨터를 구입 후 대신 사용하십시오. 감사합니다.