2017-02-18 73 views
0

我正在使用axWindowsMediaPlayer播放列表,並有一些問題 - 在一個視頻結束之後 - 下一次播放沒有任何暫停。我不能暫停或停止它,即使與axWindowsMediaPlayer播放列表暫停(c#)

private void axWindowsMediaPlayer1_MediaChange(object sender, AxWMPLib._WMPOCXEvents_MediaChangeEvent e) 
    { 

     if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsMediaEnded) 
     {axWindowsMediaPlayer1.Ctlcontrols.pause(); }} 

它不會做任何事情,但必須停止播放器。我能用這個做什麼?或者甚至禁用AUTOplaying下一個播放列表文件,那會更好。 Thx很多幫助!

+0

WMP是善變的,這些「進步改變」事件(PlayStateChange也)只是爲了更新你自己的用戶界面。你不能用它們來改變玩家的狀態。稍後,您必須在事件返回後發出命令。通過使用表單的BeginInvoke()方法來簡單地完成Winforms應用程序。 –

回答

0

我相信你應該傳遞給方法的對象和另外的PlayStateChange事件像這樣被工作:}

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) 
{ 
    if (e.newState == 8) 
    { 
     e.Ctlcontrols.pause(); 
    } 
} 

更新:此外,我會建議你使用axWindowsMediaPlayer1_PlayStateChanged()事件而不是媒體變化,因爲這可能是問題發生的地方。

'8'表示「Media Ended」,如果您知道如何以另一種方式訪問​​它,那麼當然可以。如果你想使用WMPLib.WMPPlayState.wmppsMediaEnded,我相信它會得到相同的結果。

+0

謝謝!但你能給一些附加信息嗎?我不能在axWindowsMediaPlayer1_MediaChange或axWindowsMediaPlayer1_PlayStateChange中使用e.playState。那麼在什麼情況下我可以使用這個? –

+0

請參閱我的編輯,您應該可以使用e.newState,並且這將在PlayStateChanged事件中。 –

+0

if(e.newState == 8){}工作很好,但e.Ctlcontrols.pause(); - 沒有。錯誤CS1061。 axWindowsMediaPlayer1.Ctlcontrols.pause(); - 編譯,但沒有效果。 –